通过代码动态创建一个Logger和Appender
LoggerRepository repository = LogManager.getLoggerRepository();
Logger dbossClientLogger = repository.getLogger("com.duitang.dboss.client");
dbossClientLogger.setAdditivity(false);
dbossClientLogger.setLevel(Level.INFO);
DailyRollingFileAppender appender = new DailyRollingFileAppender(
new PatternLayout(
"%d{yyyy-MM-dd HH:mm:ss} [%p] %c %x - %m%n"),
"/duitang/logs/usr/japa/dboss.log",
"yyyy-MM-dd");
dbossClientLogger.addAppender(appender);
log4j的几个问题:
1. spring如何初始化log4j?
2. 不使用spring如何初始化log4j?
3. log4j的logger和appender如何定义?
spring 初始化流程
1.org.springframework.web.util.Log4jConfigListener
2.org.springframework.util.Log4jConfigurer.initLogging()
3.调用log4j的入口
org.apache.log4j.xml.DOMConfigurator.configure(url)
或
org.apache.log4j.xml.PropertyConfigurator.configure(url)
RollingFileAppender和DailyRollingFileAppender:
log4j提供RollingFileAppender和DailyRollingFileAppender将日志记录输出到文件。RollingFileAppender按log文件最大长度限度生成新文件,DailyRollingFileAppender按日期生成新文件。
log4j.rootCategory=INFO, CONSOLE,R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/portal.log
log4j.appender.R.Encoding=GBK
log4j.appender.R.MaxFileSize=256KB
log4j.appender.R.Append=true
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n
上面是使用RollingFileAppender的写法,将会在Tomcat的logs目录下,生成portal.log文件,当文件大小超过256KB时,将原来的文件更名为portal.log.1,再使用portal.log接收新的日志记录。
log4j.appender.R.MaxBackupIndex=10表示只保存10个备份文件。
下面是使用DailyRollingFileAppender的写法,配置完成的当天, 会在Tomcat的logs目录下,生成名为portal.log的文件,比如今天是2010-01-13, 到明天这个文件将更名为portal.log2010-01-13.log
log4j.rootCategory=INFO, CONSOLE,DailyRolling
log4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRolling.File=${catalina.base}/logs/portal.log
log4j.appender.DailyRolling.DatePattern=yyyy-MM-dd'.log'
log4j.appender.DailyRolling.layout=org.apache.log4j.PatternLayout
log4j.appender.DailyRolling.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n
logger的additivity
它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。