理解
按照我的理解log4j分成三部分:
(a)logger, 负责收集错误信息;如:log4j.logger.com=info, Console 收集com包下错误信息是info以及info级别以上的,以Console(b appender)形式输出, Console的名字随便命名只要和(b)对应上;
(b)appender, 负责把信息输出到哪里去;
如:log4j.appender.Console=org.apache.log4j.ConsoleAppender 把信息输出到控制台; appender 还有很多种如: 写入文件: org.apache.log4j.FileAppender 每天产生一个文件: org.apache.log4j.DailyRollingFileAppender 写入数据库: org.apache.log4j.jdbc.JDBCAppender 等等;
(c)layout,输出到appender的信息以何种布局显示;
如:PatternLayout 根据自己配置格式信息 log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %l - %m%n layout的种类: org.apache.log4j.HTMLLayout org.apache.log4j.PatternLayout org.apache.log4j.SimpleLayout org.apache.log4j.TTCCLayout
测试
(a)引入包
(b)新建一个配置文件log4j.properties,放在classes目录下,配置文件内容:
#rootLogger
log4j.rootLogger=error, Console
#子logger
#只针对com.hateapple.log包下生效
log4j.logger.com.hateapple.log=info, Console
#只针对com.hateapple.servlet包下生效
log4j.logger.com.hateapple.servlet=info, RollingFile
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %l - %m%n
#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=e:\bole.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %l - %m%n
(c)测试1
package com.hateapple.log;
import org.apache.log4j.Logger;
public class HelloLog4jConsole {
private static final Logger log = Logger.getLogger(HelloLog4jConsole.class);
public static void main(String[] args) {
log.error("HelloLog4jConsole error log");
log.warn("HelloLog4jConsole warn log");
log.info("HelloLog4jConsole info log");
log.debug("HelloLog4jConsole debug log");
}
}
结果输出:
分析结果
1. 同级别的日志信息输出两条,说明rootLogger也生效了;
2. rootLogger的日志级别是error,打印信息却有warn 和info 级别的,说明日志级别由子logger决定;
3. 查看e盘下是否有bloe.log日志文件,没有说明另外一个子logger没有对当前测试生效;
测试2:去掉rootLogger的Console, 为子loggerlog4j.logger.com.hateapple.log增加RollingFile
#rootLogger
log4j.rootLogger=error
#子logger
#只针对com.hateapple.log包下生效
log4j.logger.com.hateapple.log=info, Console,RollingFile
#只针对com.hateapple.servlet包下生效
log4j.logger.com.hateapple.servlet=info, RollingFile
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %l - %m%n
#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=e:\bole.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %l - %m%n
结果输出:
分析结果:1.同级别日志不再重复(将rootLogger的Console去掉了),验证了测试1的分析;
2.查看e盘 ,生成了log文件,说明RollingFile配置生效了;