Posted on 2005-12-26 21:21
Justfly Shi 閱讀(3576)
評論(0) 編輯 收藏 所屬分類:
tips
這兩天在修改代碼中的log4j的配置。
log4j的配置有兩種,一種是按照屬性進行配置,一種是使用代碼進行配置。
1、按照屬性進行配置
按照屬性進行配置可以分為按照properties格式的進行配置,一種是按照XML格式的進行配置,后者沒有研究過,在此就不寫了。
按照properties 的設置比較簡單。使用org.apache.log4j.PropertyConfigurator類就可以了
最簡單的當時是如下所示的代碼了。
PropertyConfigurator.configure(_log4jProperties);
另外在這個類中還有別的方法也相當有用,如:
static public void configureAndWatch(String configFilename)
2、使用代碼進行配置
這個比較羅嗦,不過可控制性比較高
代碼示例如下:
Layout layout = new PatternLayout(logPattern);
RollingFileAppender fileAppendar = new RollingFileAppender(layout,_fileName, true);
fileAppendar.setMaximumFileSize(_fileSize * 1024 * 1024);
fileAppendar.setMaxBackupIndex(_fileNum);
ConsoleAppender consoleAppendar = new ConsoleAppender(layout, "System.out");
consoleAppendar.setLayout(layout);
Logger mainLogger = Logger.getLogger("cn.justfly");
mainLogger.setLevel(Level.toLevel(_logLevel, Level.INFO));
mainLogger.addAppender(fileAppendar);
mainLogger.addAppender(consoleAppendar);
需要分別配置Layout、Appender和Logger
然后把Layout配置給Appender,把Appender添加給Logger,于是乎就大功告成了。
3、去掉原有的屬性配置
在上面的兩種方面中只是會添加原有的配置。并不會刪除掉原先的配置項。
可以使用LogManager.resetConfiguration();來刪除原有的配置。
4、鎖定在執行配置代碼的時候,當有Logger在干活的時候怎么辦?
比如在你去掉原有的配置項而還沒有來得及設置新的屬性的時候的時候
這個時候Log4j的配置是空的,如果這個時候有一個Logger正在log的話是會出錯的。
所以我們需要一個鎖,它可以讓你在進行配置的時候阻塞其它Logger的動作。
這個鎖就是rootLogger。可以通過Logger.getRootLogger()獲取到。