avatar

lombok中关于log4j2日志的配置

使用lombok编写日志更加方便,本文介绍lombok与log4j2日志的配置

为什么使用日志

1.使用应用程序是客户,如果程序出了问题,一般客户能提供精确步骤就阿弥陀佛了。

2.不是所有的问题都很容易重现

3.如果我们仅仅使用调试器断点机制,该问题没有重现,会让我们以为已经解决了

哪些位置要做日志记录

本着一个原则:在不使用DEBUG调试器的情况下,通过日志信息定位错误位置。尽可能在可能出现问题的代码附近做日志。

log4j与lombok结合使用步骤

第一步:引入依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>

第二步:添加log4j2.xml配置文件

文章末尾会对该配置文件做介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO">
<appenders>
<!--配置打印到控制台的数据格式-->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!--
fileName:表示日志写入到logs/app.log文件中
filePattern:当日志达到5M时,对app.log按照filePattern的值g进行重命名并归档
-->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<!--写入到日志中的数据格式-->
<PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!--
触发策略:每经过1小时或者当文件大小到达5M时,
按照app-2017-08-01 12.log的格式对app.log进行重命名并归档,
并生成新的文件用于写入log 1个小时或者5M-->
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="5MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<!--
日志的四个级别从低到高 DEBUG INFO WARN ERROR
以下配置表示DEBUG级别以上的日志将会
按照Console规范打印到控制台
按照RollingFile规范输出到文件-->
<root level="DEBUG">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFile"/>
</root>
</loggers>
</configuration>

第三步:引入@Slf4j注解和log变量

1
2
3
4
5
6
7
8
9
10
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class T {
public static void main(String[] args) {
while(true){
log.info("XXXXXXXXXXXXXXXXXXXXXXX");
}
}
}

查看日志位置

如果是普通java工程,日志相对于项目根目录

如果是web工程,日志文件在tomcat的bin目录下

如果是web工程,使用的是maven中的tomcat插件,启动tomcat的时候查看控制台,找到以下信息””

log4j2.xml配置文件配置介绍

RollingFile标签

方式1

按天记录日志,日志保留7天

1
2
3
4
5
6
7
8
9
10
11
12
<RollingFile name="rollingFile" fileName="log/main.log" filePattern="log/$${date:yyyy-MM}/main-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="log" maxDepth="2">
<IfFileName glob="*/*.log.gz" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>

方式2

按小时记录日志,日志保留6天

1
2
3
4
5
6
7
8
9
10
11
12
<RollingFile name="rollingFile" fileName="log/main.log" filePattern="log/$${date:yyyy-MM}/main-%d{yyyy-MM-dd-HH}.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="log" maxDepth="2">
<IfFileName glob="*/*.log.gz" />
<IfLastModified age="6d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>

方式3

按大小记录日志,满20MB记录一个日志,日志保留7天;同一天最多生成10个20MB日志文件,由filePattern中的%i和DefaultRolloverStrategy中max的值决定

1
2
3
4
5
6
7
8
9
10
11
12
13
<RollingFile name="rollingFile" fileName="log/main.log" filePattern="log/$${date:yyyy-MM}/main-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="20 MB" />
</Policies>
<DefaultRolloverStrategy max="10">
<Delete basePath="log" maxDepth="2">
<IfFileName glob="*/*.log.gz" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>

interval的单位

关键点在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval;日期格式精确到哪一位,interval也精确到哪一个单位
若将filePattern改为filePattern=“logs/app-%d{yyyy-MM-dd HH-mm}-%i.log”,yyyy-MM-dd HH-mm最小时间粒度为分钟,将每1分钟触发一次rollover。

文章作者: 微信:hao_yongliang
文章链接: https://haoyongliang.gitee.io/2020/01/07/%E5%B7%A5%E5%85%B7/lombok%E4%B8%AD%E5%85%B3%E4%BA%8Elog4j2%E6%97%A5%E5%BF%97%E7%9A%84%E9%85%8D%E7%BD%AE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郝永亮的主页
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论