在Log4j 1.x版本中,log4j.properties
文件是配置日志系统的主要方式。这个文件包含了一系列的属性设置,用于定义日志的行为,包括日志级别、Appender(日志输出目的地)的配置、以及Appender的布局(Layout)等。下面是对这些参数的一些详细解读:
1. 根Logger(Root Logger)
log4j.rootLogger=LEVEL, APPENDER1, APPENDER2, ...
LEVEL
:这是根Logger的日志级别。Log4j 1.x中支持的级别有TRACE、DEBUG、INFO、WARN、ERROR和FATAL。只有级别等于或高于这个级别的日志消息才会被处理。APPENDER1, APPENDER2, ...
:这些是通过逗号分隔的Appender名称列表,根Logger将把日志消息发送给这些Appender。Appender定义了日志消息的目的地,比如控制台、文件、远程服务器等。
2. Appender配置
Appender的配置通常包括Appender的类型、名称、目标(如文件名)、布局(Layout)等。
java
# ConsoleAppender配置示例
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# FileAppender配置示例
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=logs/myapp.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.A1
(或log4j.appender.FILE
):这定义了Appender的名称,后面所有的配置都将通过这个名称来引用这个Appender。org.apache.log4j.ConsoleAppender
(或org.apache.log4j.FileAppender
):这指定了Appender的类型,即这个Appender是一个控制台Appender还是一个文件Appender。log4j.appender.A1.Target=System.out
:这是ConsoleAppender
特有的属性,指定了输出目标,System.out
是标准输出流,通常指向控制台。log4j.appender.FILE.File
:这是FileAppender
特有的属性,指定了日志文件的路径和名称。log4j.appender.FILE.Append=true
:这也是FileAppender
特有的属性,指定是否追加日志到文件末尾,true
表示追加,false
表示覆盖。log4j.appender.A1.layout
(或log4j.appender.FILE.layout
):这指定了Appender的布局类型,PatternLayout
是常用的布局类型,它允许你通过指定的模式来格式化日志消息。log4j.appender.A1.layout.ConversionPattern
(或log4j.appender.FILE.layout.ConversionPattern
):这定义了PatternLayout
的布局模式,用于格式化日志消息。模式字符串可以包含各种日志事件的格式化信息,如日期、日志级别、日志消息等。
3. 日志级别与Appender的关系
除了根Logger可以指定日志级别外,你也可以为特定的Logger(而不是根Logger)指定级别,并且这些Logger可以引用不同的Appender。这允许你对不同的包或类进行细粒度的日志控制。
4. 关于log4j.appender.FILE.layout.ConversionPattern的解读
log4j.appender.FILE.layout.ConversionPattern
是 Log4j 1.x 配置中用于定义文件Appender(FileAppender
)输出日志消息格式的重要参数。它指定了一个模式字符串(Pattern String),该字符串决定了日志消息在文件中被格式化的方式。这个模式字符串可以包含多个格式化选项,用于在日志消息中插入各种信息,如时间戳、日志级别、日志记录器的名称、日志消息本身等。
下面是对 log4j.appender.FILE.layout.ConversionPattern
中一些常用格式化选项的解读:
-
%d{yyyy-MM-dd HH:mm:ss}
:这表示日期和时间,其中{yyyy-MM-dd HH:mm:ss}
指定了日期和时间的格式。在这个例子中,日期将以年-月-日 时:分:秒
的格式显示。 -
%-5p
:这表示日志消息的级别(如DEBUG、INFO、WARN、ERROR等),-5
指定了日志级别文本的最小宽度为5个字符,如果不足5个字符,则左对齐并填充空格;如果超过5个字符,则不会被截断。 -
%c{1}
:这表示日志记录器的名称(即发出日志消息的类的全限定名)。{1}
指定了只显示类名的最后一个组件(即类名本身,不包括包名)。如果你想去掉包名并只显示类名,这是一个很有用的选项。 -
%L
:这表示发出日志消息的代码行号。 -
%m
:这表示日志消息本身。 -
%n
:这表示新行,用于在日志消息之间插入换行符。 -
[%t]
:显示产生日志事件的线程名称,被方括号包围。
将这些格式化选项组合起来,就可以得到一个完整的 ConversionPattern
。例如:
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
这个模式字符串告诉 Log4j,在将日志消息写入文件时,应该按照以下格式来格式化每条消息:
- 首先,显示日期和时间(格式为
年-月-日 时:分:秒
)。 - 然后,显示日志级别(左对齐,至少占用5个字符的宽度)。
- 接着,显示发出日志消息的类的最后一个组件名称(即类名),后面跟着一个冒号和行号。
- 最后,显示日志消息本身,并在消息末尾添加一个换行符。
这样,每条日志消息都会按照指定的格式清晰地显示在文件中,便于后续的查看和分析。