这两天在修改代码中的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()获取到。