在 log4j 教程中,我们看到如何使用log4j xml 基于的配置,但log4j.xml 是可言的,所以log4j 框架也提供了从属性文件读取配置的选项。
根记录器
Root logger 是当没有与日志器匹配时使用的,它在 XML 中如下所定义。
1<root>
2 <priority value="DEBUG" />
3 <appender-ref ref="file" />
4 <appender-ref ref="console" />
5</root>
它可以在下面的属性文件中定义。
1log4j.rootLogger=DEBUG, file, console
Comma 分隔列表中的第一个值是根日志级值. 所有其他值都是附件。
Log4j 附件
我们可以在log4j中拥有多个附件,下面有两个附件,一个用于控制台日志,另一个用于文件。
1<!-- console appender -->
2<appender name="console" class="org.apache.log4j.ConsoleAppender">
3 <param name="Target" value="System.out" />
4 <layout class="org.apache.log4j.PatternLayout">
5 <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
6 </layout>
7</appender>
8
9<!-- rolling file appender -->
10<appender name="file" class="org.apache.log4j.RollingFileAppender">
11 <param name="File" value="logs/main.log" />
12 <param name="Append" value="true" />
13 <param name="ImmediateFlush" value="true" />
14 <param name="MaxFileSize" value="10MB" />
15 <param name="MaxBackupIndex" value="5" />
16
17 <layout class="org.apache.log4j.PatternLayout">
18 <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
19 </layout>
20</appender>
在log4j.properties文件中,它们将如下所述。
1#Define console appender
2log4j.appender.console=org.apache.log4j.ConsoleAppender
3logrj.appender.console.Target=System.out
4log4j.appender.console.layout=org.apache.log4j.PatternLayout
5log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
6
7#Define rolling file appender
8log4j.appender.file=org.apache.log4j.RollingFileAppender
9log4j.appender.file.File=logs/main.log
10log4j.appender.file.Append=true
11log4j.appender.file.ImmediateFlush=true
12log4j.appender.file.MaxFileSize=10MB
13log4j.appender.file.MaxBackupIndex=5
14log4j.appender.file.layout=org.apache.log4j.PatternLayout
15log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n
因此,log4j 属性文件附件的格式是 log4j.appender.{appender_name}.{appender_config}
. 请注意,附件配置如 MaxFileSize
, MaxBackupIndex
与 XML 配置文件相同。
Log4j 注册器
就像附件一样,我们可以有多个日志,例如基于xml的配置;
1<logger name="com.journaldev.log4j" additivity="false">
2 <level value="WARN" />
3 <appender-ref ref="file" />
4 <appender-ref ref="console" />
5</logger>
6
7<logger name="com.journaldev.log4j.logic" additivity="false">
8 <level value="DEBUG" />
9 <appender-ref ref="file" />
10</logger>
它们将在属性文件中定义为 log4j.logger.{logger_name}
. 值包含日志级别和要使用的附件列表。
1#Define loggers
2log4j.logger.com.journaldev.log4j=WARN, file, console
3log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console
Log4j 登录器添加性
附加性使用在上面的logger xml配置中显示,它是logger元素的属性. 下面是如何在log4j属性文件配置中使用它作为 log4j.additivity.{logger_name}
。
1#setting additivity
2log4j.additivity.com.journaldev.log4j=false
3log4j.additivity.com.journaldev.log4j.logic=false
基于上面,下面是我的最终log4j.properties文件。
1#Define root logger options
2log4j.rootLogger=DEBUG, file, console
3
4#Define console appender
5log4j.appender.console=org.apache.log4j.ConsoleAppender
6logrj.appender.console.Target=System.out
7log4j.appender.console.layout=org.apache.log4j.PatternLayout
8log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
9
10#Define rolling file appender
11log4j.appender.file=org.apache.log4j.RollingFileAppender
12log4j.appender.file.File=logs/main.log
13log4j.appender.file.Append=true
14log4j.appender.file.ImmediateFlush=true
15log4j.appender.file.MaxFileSize=10MB
16log4j.appender.file.MaxBackupIndex=5
17log4j.appender.file.layout=org.apache.log4j.PatternLayout
18log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n
19
20#Define loggers
21log4j.logger.com.journaldev.log4j=WARN, file, console
22log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console
23
24#setting additivity
25log4j.additivity.com.journaldev.log4j=false
26log4j.additivity.com.journaldev.log4j.logic=false
Log4j 财产配置器
「PropertyConfigurator」用于配置log4j设置. 如果文件名为log4j.properties,它在项目类路径中是可选的。我们必须在使用日志器之前配置它。
1package com.journaldev.log4j.main;
2
3import org.apache.log4j.Logger;
4import org.apache.log4j.PropertyConfigurator;
5
6import com.journaldev.log4j.logic.MathUtils;
7
8public class Log4jExample {
9
10 static{
11 init();
12 }
13
14 private final static Logger logger = Logger.getLogger(Log4jExample.class);
15
16 public static void main(String[] args) {
17
18 logger.debug("My Debug Log");
19 logger.info("My Info Log");
20 logger.warn("My Warn Log");
21 logger.error("My error log");
22 logger.fatal("My fatal log");
23
24 }
25
26 /**
27 * method to init log4j configurations
28 */
29 private static void init() {
30 PropertyConfigurator.configure("log4j.properties");
31 }
32
33}
当它执行时,你会得到下面的控制台日志。
1WARN Log4jExample - My Warn Log
2ERROR Log4jExample - My error log
3FATAL Log4jExample - My fatal log
同时,你会看到日志在 main.log 文件中生成,如下所示。
12016-05-14 00:34:11,994 +0530 [main] WARN (Log4jExample.java:20) - My Warn Log
22016-05-14 00:34:11,995 +0530 [main] ERROR (Log4jExample.java:21) - My error log
32016-05-14 00:34:11,995 +0530 [main] FATAL (Log4jExample.java:22) - My fatal log
请注意,调试和信息日志器不会被打印,因为最低日志级别设置为 WARN. 这就是log4j属性文件示例使用的全部。