<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
在 /src/main/resources/
目录下新建 log4j 的配置文件:log4j.properties
:
###### Logger init ######
log4j.rootLogger=ALL,FA
###### File Appender (FA) ######
log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.File=/logs/me_too.log
#log4j.appender.FA.MaxFileSize=10240KB
#log4j.appender.FA.MaxBackupIndex=20
log4j.appender.FA.Append=true
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n
###### Console Appender Dev (CAD) ######
log4j.logger.ConsoleDev=DEBUG, CAD
log4j.appender.CAD = org.apache.log4j.ConsoleAppender
log4j.appender.CAD.layout = org.apache.log4j.PatternLayout
log4j.appender.CAD.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n
###### Console Appender Prod (CAP) ######
log4j.logger.ConsoleProd=INFO, CAP
log4j.appender.CAP = org.apache.log4j.ConsoleAppender
log4j.appender.CAP.layout = org.apache.log4j.PatternLayout
log4j.appender.CAP.layout.ConversionPattern = %m%n
###### INPUT Appender (IA) ######
log4j.logger.INPUT=INFO, IA
log4j.appender.IA=org.apache.log4j.ConsoleAppender
log4j.appender.IA.layout = org.apache.log4j.PatternLayout
log4j.appender.IA.layout.ConversionPattern = %m
###### INPUT Appender (IA) ######
# Exclude swiss re logging for debug
#log4j.logger.com.swissRe=error
Log4j 日志的输出都依赖于一个称为 “输出源”(Appender) 的东西。而输出源可以大概分为 输出到控制台 和 输出到文件 两大类。
每一个输出源都需要配置三个参数:输出装置(Appender)、布局、输出格式:
log4j.appender.CAD = org.apache.log4j.ConsoleAppender
log4j.appender.CAD.layout = org.apache.log4j.PatternLayout
log4j.appender.CAD.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n
其中输出装置可以进行自定义,只需要继承 org.apache.log4j.AppenderSkeleton
并重写 append()
和 requiresLayout()
方法即可。
日志的输出格式参考 这篇文章 。
除了上面三个基本配置外,每一个输出源还需要配置它的名称和日志级别:
log4j.logger.ConsoleDev=DEBUG, CAD
这个配置的含义是,定义一个 logger 名称为 ConsoleDev ,它的日志级别为 DEBUG,它的配置简称为 CAD。
在程序中我们这样去调用该日志输出源:
private static final Logger logger = Logger.getLogger("ConsoleDev");
这样在程序中就会调用到配置文件中配置的名叫 ConsoleDev 输出源进行日志输出。
同样每个文件输出源都需要有三个配置:
log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n
除此之外,还可以进行以下配置:
log4j.appender.FA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FA.File=/logs/me_too.log
log4j.appender.FA.MaxFileSize=10240KB
log4j.appender.FA.MaxBackupIndex=20
log4j.appender.FA.Append=true
log4j.appender.FA.layout = org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern = [ME_TOOL][%d{yyyy-MM-dd}][%d{HH:mm:ss}][%p][%l] - %m%n
其中,log4j 提供了多个 File Appender:
使用以下代码配置默认输出源:
log4j.rootLogger=ALL,FA
其中等号右边第一个参数表示默认 Logger 的日志级别, All
表示记录所有级别的日志(Log4j 日志级别见文末) ;第二个参数表示将哪些日志输出源作为默认 Logger。
需要注意的是,默认 Logger 中可以同时配置多个 File Appender ,这些配置可以实现将日志输出到不同环境或设备的文件中去。 同时默认 Logger 中的控制台输出源也能配置多个 Console Appender,只不过需要注意的是,如果在默认 Logger 处配置了某个/某些 Console Appender ,并且配置文件中有不止一个 Console Appender,那么程序运行时控制台会同时输出多个Console Appender的内容,即使你指定了在程序中使用哪个 Logger,因此一般建议 rootLogger 不配置 Console Appender,除非配置文件中只有一个控制台输出源。
另外需要注意的是,rootLogger配置的输出源名称为其简称,如:log4j.rootLogger=ALL,FA,CAD
当设置了日志级别为INFO时,这意味着只有 INFO、WARN、ERROR 和 FATAL 级别的日志消息会被记录。