Springboot-log4j2
一、配置项
- 常用Appenders
名称 |
作用 |
Console |
控制台输出 |
RollingFile |
普通可以滚动的文件 |
RollingRandomAccessFile |
带有指针的文件,策略较多,较常用 |
Smtp |
邮箱 |
Socket |
直接通过socket传输 |
- pattern参数
参数 |
解释 |
%level{参数1}{参数2}{参数3} |
%level{级别替换}{长度}{大小写} |
%t或%thread |
创建logging事件的线程名 |
%n |
换行符,根据系统自行决定,如Windows是”\r\n”,Linux是”\n” |
%M或%method |
输出方法名,如“main”,“getMsg”等字符串 |
%L |
输出错误行号,如“13” |
%d{参数}{时区te{参数}{时区 |
输出时间 |
%C{参数}或%class{参数} |
输出类名 |
%c{参数}或%logger{参数} |
输出logger的名称 |
|
|
- pattern中%c的表达式
|
|
|
%c{1} |
org.apache.com.te.Foo |
Foo |
%c{2} |
org.apache.com.te.Foo |
te.Foo |
%c{1.} |
org.apache.com.te.Foo |
o.a.c.t.Foo |
%c{1.1.!} |
org.apache.com.te.Foo |
o.a.!.!.Foo |
%c{.} |
org.apache.com.te.Foo |
….Foo |
二、代码
- pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions><!-- 去掉springboot默认配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
- log4j2.xml
<Configuration status="error">
<Properties>
<Property name="log-path">logs</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern=" %highlight{%-5level} %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n" />
</Console>
<RollingRandomAccessFile name="info" fileName="${log-path}/info.log"
filePattern="${log-path}/info-%d{yyyy-MM-dd HH-mm}-%i.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n</pattern>
</PatternLayout>
<Policies>
<!--每1小时/分/... 生成一个文件, 时间依据filePattern的配置-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="5 MB"/>
</Policies>
<DefaultRolloverStrategy max="30">
<Delete basePath="${log-path}/$${date:yyyy-MM}/" maxDepth="2">
<IfFileName glob="*/*.log" />
<!--!Note: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
<!--7天-->
<IfLastModified age="20m" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<RollingFile name="debug" fileName="${log-path}/debug.log"
filePattern="${log-path}/debug-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n
</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy interval="1">
</TimeBasedTriggeringPolicy>
</RollingFile>
<RollingFile name="warn" fileName="${log-path}/warn.log"
filePattern="${log-path}/warn-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n
</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy/>
</RollingFile>
<RollingFile name="error" fileName="${log-path}/error.log"
filePattern="${log-path}/error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n
</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="log.controller.info" level="info" additivity="false">
<appender-ref ref="info" />
</Logger>
<Logger name="log.controller.warn" level="warn" additivity="false">
<appender-ref ref="warn" />
</Logger>
<Logger name="log.controller.error" level="error" additivity="false">
<appender-ref ref="error" />
</Logger>
<Logger name="log.controller.debug" level="debug" additivity="false">
<appender-ref ref="debug" />
</Logger>
<Root name="log.controller.debug" level="info">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
详情参考这位大神的帖子,又详细的解释,https://www.cnblogs.com/keeya/p/10101547.html