log4j的日志系统包含两个主要概念:Logger与Appender,前者负责触发日志记录动作,后者决定日志输出至何处。
各个Logger实例之间可能存在父子关系,所有实例都有一个共同的root Logger实例,如下文的第一行的rootCategory就是root Logger实例。
log4j示例文件如下:
log4j.rootCategory=info,stdout # CONSOLE appender not used by default log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c{1} %M %L - %m%n # File appender log4j.appender.perf=org.apache.log4j.RollingFileAppender log4j.appender.perf.layout=org.apache.log4j.PatternLayout log4j.appender.perf.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n log4j.appender.perf.file=Z:/logs/snc-perf-test.log log4j.appender.perf.MaxFileSize=40MB log4j.appender.perf.MaxBackupIndex=40 log4j.appender.perf.append=true log4j.appender.perf.ImmediateFlush=true log4j.appender.druid=org.apache.log4j.RollingFileAppender log4j.appender.druid.layout=org.apache.log4j.PatternLayout log4j.appender.druid.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n log4j.appender.druid.file=Z:/logs/snc-perf-druid-test.log log4j.appender.druid.MaxFileSize=40MB log4j.appender.druid.MaxBackupIndex=40 log4j.appender.druid.append=true log4j.appender.druid.ImmediateFlush=true log4j.logger.com.simiam.snc.perf=debug,perf log4j.logger.org.springframework=INFO,perf log4j.logger.druid.sql=info,druid log4j.logger.druid.sql.DataSource=info,druid log4j.logger.druid.sql.Connection=info,druid log4j.logger.druid.sql.Statement=debug,druid log4j.logger.druid.sql.ResultSet=info,druid
上面的配置文件提供了3个appender(什么是appender请google),一个将日志打印至stdout,两个保存文件。
文件中的第一行定义的日志root Logger实例:log4j.rootCategory=info,stdout ,该实例关联了stdout appender,如果没有为特定的Logger实例指定相应的appender,所有Logger实例将会使用rootCategory实例来输出日志信息(这里则只输出至console)。
最下面几行以log4j.logger开头的行指定了多个Logger实例,每个实例指定了日志级别,以及与该Logger实例相关的日志最终将使用哪个appender输出。
应用中的具体logger实例在执行相应的日志方法时【如logger.info("log some message")】则会找出该实例关联的appender并输出日志(如果logger未关联appender则不会输出),然后向上获取logger.parent再调用parent的appender输出日志,如此循环直至搜索至root。
比如如下Logger实例:
log4j.logger.druid.sql.DataSource=info,druid
会将相关日志输出至druid appender所关联的文件snc-perf-druid-test.log中,同时也会在console中打印日志信息(向上搜索至root,root关联stdout appender)。
log4j日志记录简析