SpringBoot——日志处理(Log4j2)

原创
2020/10/10 17:03
阅读数 2.6K

Springboot-log4j2

一、配置项

  1. 常用Appenders
名称 作用
Console 控制台输出
RollingFile 普通可以滚动的文件
RollingRandomAccessFile 带有指针的文件,策略较多,较常用
Smtp 邮箱
Socket 直接通过socket传输
  1. 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的名称
  1. 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

二、代码

  1. 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>
  1. 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

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部