使用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>
<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"/>
<Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="5MB"/> </Policies> </RollingFile> </appenders> <loggers>
<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。