java Logging API 使用
當你在開發程序的時候, 調試(debugging)和日志(logging)都是非常重要的工作, 但是, 現在有太多的 logging api 問世, 因為他們都不錯, 很難做一個抉擇. 國外 java 論壇對于這些 logging 方式也是有一番討論.而 common logging 就是一個在這幾個不同的 logging api 中建立小小的橋梁.目前在 java 中最有名的 log 方式, 首推是 log4j, 另是 jdk 1.4 logging api. 除此之外, 還有 avalon 中用的 logkit 等等 . 而 commons-logging 也有實現一些基本 的 logging 方式為 nooplog 及 simplelog. 對于他們的比較不在這次討論范圍,
有興趣者請自行參閱參考文件.
快速使用 logging 其實 logging 非常簡單去使用, 將 commons-logging.jar 放到 /web-inf/lib 之下.接著寫以下的代碼
loggingtest.java
package com.softleader.newspaper.java.opensource;
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
public class loggingtest {
log log = logfactory.getlog(loggingtest.class);
public void hello() {
log.error("error");
log.debug("debug");
log.warn("warn");
log.info("info");
log.trace("trace");
system.out.println("okok");
}
}
在 / 放置一個 jsp 測試 test-commons-logging.jsp
<%@ page import="com.softleader.newspaper.java.opensource.loggingtest" %>
<% loggingtest test = new loggingtest(); test.hello();%>
你將會看到 tomcat console 會有下面輸出
log4j:warn no appenders could be found for logger (com.softleader.newspaper.java.opensource.loggingtest).
log4j:warn please initialize the log4j system properly.okok
是因為你還沒有配置 commons-logging.properties, 馬上會為你介紹 ~~~.
設定 commons-logging.properties 你可以設置你的 log factory 是要使用哪一個 我以 log4j 為例子 在 /web-inf/classes/commons-logging.properties 中寫入
org.apache.commons.logging.log=org.apache.commons.logging.impl.log4jcategorylog
如果你 server 是使用 jdk1.4 以上的版本
可以使用 org.apache.commons.logging.impl.jdk14logger
接著根據你的 logger 撰寫符合他的 properties 拿 log4j 為例子 你就要在
/web-inf/classes/ 下放置一個 log4j.properties
//日志輸出到文件
log4j.rootlogger=debug, a_default
log4j.appender.a_default=org.apache.log4j.rollingfileappender
log4j.appender.a_default.file=c://log/test.log
log4j.appender.a_default.maxfilesize=4000kb
log4j.appender.a_default.maxbackupindex=10
log4j.appender.a_default.layout=org.apache.log4j.patternlayout
log4j.appender.a_default.layout.conversionpattern=%d{iso8601} - %p - %m%n
# 比較完整的輸出
# log4j.appender.a_default.layout.conversionpattern=%d %-5p [%t] %-17c{2} (%13f:%l) %3x - %m%n
//日志輸出到控制臺
log4j.rootlogger=info, a1
log4j.appender.a1=org.apache.log4j.consoleappender
log4j.appender.a1.layout=org.apache.log4j.patternlayout
log4j.appender.a1.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%c]-[%p] %m%n
此時你去執行 test-commons-logging.jsp 輸出的內容, 就會記錄在你的 c:\log 目錄的 test.log 中了 ps:如果沒有相關的 class 會使用到 simplog, 此時要設定的是
simplelog.properties 結論以我自己本身使用的經驗, log4j 可以滿足所有工程師, 所以我也是直接使用 log4j 而沒有使用 commons-logging.
不過為了增加產品的通用性, 避免移植時候的麻煩, 新的產品及項目, 我會將他改成 commons-logging api 去調用.
如果你對commons-logging的工作原理不是很了解,請參考<commons-logging的使用方法>
文章整理:http://www.west263.com