#設定 Logger(s),格式 logger_name = message_level, appender1, appender2, ...
log4j.rootCategory=error, stdout
#以下是給fileftp.java使用的專屬Category
log4j.category.doftp.name=info, X
#以下設定false時,訊息不會往rootCategory送,只會在doftp.name的自訂Categoey中
log4j.additivity.doftp.name=false
#設定 Appenders
#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
### 設定doftp.name是RollingFile的方式
log4j.appender.X=org.apache.log4j.RollingFileAppender
log4j.appender.X.File=doftp.log
log4j.appender.X.MaxFileSize=300KB
log4j.appender.X.MaxBackupIndex=2
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.ConversionPattern=%5p %d{yyyy-MM-dd HH:mm:ss} %m%n
2006年12月26日 星期二
Loging 實務:log4j 設定檔範例
2006年12月25日 星期一
測試預期的 Exception 行為
當某個方法我們預期會丟出 Exception 時,
可利用 fail 這個述詞來測試。
如以下的 JUnit 語法:
可利用 fail 這個述詞來測試。
如以下的 JUnit 語法:
public void testGetUserException() {
User u = null;
try {
u = UserFetcher.getUser("ThisUserIdDoesNotExist");
fail("Should have gotten NoSuchUserException - used a bad user ID");
} catch (NoSuchUserException expected) {
; // Expected - intentional
}
}
2006年11月16日 星期四
JDBC 實務:使用 JDBC 時,一定要放在 try 區塊中,並於 finally 區塊釋放 Connection
在 try/catch/finally 語法中,若有定義 finally 區塊,則執行 try 區塊後,一定會執行 finally 區塊的程式碼。
所以若程式有使用 JDBC 時,一定要包在 try 區塊中,並在 finally 中關閉 connection 釋放資源,才不會耗盡資源。
一般實務作法如下例:
所以若程式有使用 JDBC 時,一定要包在 try 區塊中,並在 finally 中關閉 connection 釋放資源,才不會耗盡資源。
一般實務作法如下例:
Connection con=null;
try{
con=new Connection();
...
...
...
}finally{
try{
con.close();
}catch(Throwable e) {
String errmsg="close connection failed! errmsg is "+e.getMessage();
log.error(errmsg);
}
}
Java 實務:發生例外事件時,log 所有的錯誤訊息
系統發生無法處理的例外時,若只顯現「發生系統錯誤,請連絡資訊室!」,但完全沒有 log 錯誤訊息,對除錯是沒有幫助的,尤其是網頁程式,若沒有作 log,則程式人員是無法掌握例外當下系統的狀態。
因此系統應導入 log 機制 Ex.log4j,來幫助我們 trace 產生例外的程式。建議所有的程式,全部應放鄉 try/catch(throwable) 區塊,除了顯現「發生系統錯誤,請連絡資訊室!」外,並將所有例外訊息傳給 log 以利除錯。
建議在程式加入以下源碼:
因此系統應導入 log 機制 Ex.log4j,來幫助我們 trace 產生例外的程式。建議所有的程式,全部應放鄉 try/catch(throwable) 區塊,除了顯現「發生系統錯誤,請連絡資訊室!」外,並將所有例外訊息傳給 log 以利除錯。
建議在程式加入以下源碼:
try {
;
}catch(Throwable e){
String errmsg = "系統例外:"+e.getMessage();
log.error(errmsg);
throw new RuntimeException(errmsg, e);
}
2006年9月5日 星期二
ANT 的 depnedent 工具
ANT 對 file operation 有一項很不錯的功能,
若 file 的 directory 不存在,
就自動建立,若 file uptodate? 則不動作。
copy
若 file 的 directory 不存在,
就自動建立,若 file uptodate? 則不動作。
copy
2006年8月4日 星期五
T:描述結構性資料
抽象化的第一件事,是能用簡單的名字描述一串結構,
較佳的結構至少是類 xml 的階層結構。
階層結構由 "{}"來區分,
而 sequence 結構由 "," 及出現的前後區分。
一個 order 有很多 entry 可這樣描述
order ={
light={amt=2},
bulb={amt=2}
}
取出 order 第一個物件就是
order.light.amt==2
用"." 點來區分物件。
較佳的結構至少是類 xml 的階層結構。
階層結構由 "{}"來區分,
而 sequence 結構由 "," 及出現的前後區分。
一個 order 有很多 entry 可這樣描述
order ={
light={amt=2},
bulb={amt=2}
}
取出 order 第一個物件就是
order.light.amt==2
用"." 點來區分物件。
訂閱:
文章 (Atom)