abstract
添加依赖
在pom.xml
文件中添加如下依赖1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<!-- spring boot start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 排除自带的logback依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- springboot-log4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
编辑配置文件
rootlogger
rootlogger主要定义log4j支持的日志级别及输出目的地,其语法为:1
log4j.rootLogger = [ level ] , appenderName, appenderName, …
- level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
- appenderName指定日志信息输出到哪个地方,可同时指定多个输出目的地。
例如:
1 | log4j.rootLogger=info, stdout |
有两个疑惑:
Level | 代号 |
---|---|
FATAL | 0 |
ERROR | 3 |
WARN | 4 |
INFO | 6 |
DEBUG | 7 |
- 后面
Threshold
有限制输出范围,如果这里设置了ERROR,Threshold
设置INfO,日志会输出WARN,和INFO级别的日志信息吗? - 中间丢失的
1
、2
、5
对应什么级别,他们是被弃用了吗?我这里有酒,希望有了解的可以讲出他们的故事;
appender
appender附加器主要定义日志信息输出位置,输出格式等。主要语法为:
1 | log4j.appender.appenderName = classInfo |
这里的appenderName
与rootlogger中的appenderName
对应
appender的classInfo有如下选项:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
例如:
1 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender |
appender.option–File
File是日志输出的目的地。
例如:1
log4j.appender.stdout.File=logs/log.log
appender.option–Threshold
输出等级限制,包含本身及以上。
例如:1
2## 输出DEBUG级别以上的日志
log4j.appender.stdout.Threshold=DEBUG
appender.option–Append
日志信息的追加方式。
true意味着,默认为true
fales意味着,
1 | package com.qigou.b2cex.test; |
使用默认配置,配置文件中有如下信息:
再次执行,信息如下;
配置中增加
1 | log4j.appender.bbdog.Append=fales |
再次执行后,本想顺理成章的像其他博文一样展示只有一份信息。但学东西真的这么顺利过吗?
实际上控制台给我报错:
1 | log4j:WARN Failed to set property [append] to value "fales". |
然后发现呵呵呵呵!false
写成了fales
.修改后文件中确实只有最新的日志信息了:
appender.option–Encoding
日志信息的编码格式;
1 | ## 输出DEBUG级别以上的日志 |
appender.option–DatePattern
在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个日志生成频度,这是通过为 DatePattern选项赋予不同的值来完成的。DatePattern选项的有效值为:
- ‘.’yyyy-MM,对应monthly(每月)
- ‘.’yyyy-ww,对应weekly(每周)
- ‘.’yyyy-MM-dd,对应daily(每天)
- ‘.’yyyy-MM-dd-a,对应half-daily(每半天)
- ‘.’yyyy-MM-dd-HH,对应hourly(每小时)
- ‘.’yyyy-MM-dd-HH-mm,对应minutely(每分钟)
DatePattern中不用处理的文字要放到单引号(‘)中,如上面的(.)。如果您对此有疑问可以查阅SimpleDateFormat的文档。DailyRollingFileAppender中使用这个类来处理DatePattern。
DatePattern格式化之后的文本作为文件名字的后缀。DailyRollingFileAppender不支持格式化之后的文本作为文件名字的前缀。
修改系统时间可以看到效果,当天的文件名为bbdog.log,之前的文件名会加上频度日期
appender.option–Layout
Layout 负责格式化Appender的输出。
Log4j提供的layout有以下几种:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
例如:
1 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout |
其中ConversionPattern有如下解释
参数 | 含义 |
---|---|
%m | 输出代码中指定的消息 |
%p | 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL |
%r | 输出自应用启动到输出该log信息耗费的毫秒数 |
%c | 输出所属的类目,通常就是所在类的全名 |
%t | 输出产生该日志事件的线程名 |
%n | 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” |
%d | 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 |
%l | 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) |
这里只演示了DailyRollingFileAppender
这种方式下的一些参数.
其他输出类型会有额外的参数,如RollingFileAppender
下会有MaxFileSize
和MaxBackupIndex
,单个文件大小和备份数量
食用方法
参考资料
CSDN-谁动了我的bug-Log4j Append属性指定是否追加内容
ConversionPattern中的格式化参数详见Log4j补充