SpringBoot + log4j2日志配置

241 阅读1分钟

配置示例

application.properties

logging.config=classpath:log4j2-spring.xml

log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <RollingFile name="RollingFileInfo" fileName="/data/logs/server/server.log"
                     filePattern="/data/logs/server/server-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n"/>>
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="30 MB"/>
            </Policies>
        </RollingFile>

        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p %c:%L [%t] - %m%n"/>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="RollingFileInfo"/>
        </Root>
    </Loggers>
</Configuration>

日志级别

日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL

Appender配置 占位符

符号含义
%d{HH:mm:ss.SSS}输出到毫秒的时间
%t输出当前线程名称
%-5level输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger输出logger名称,因为Root Logger没有名称,所以没有输出
%msg日志文本
%n换行
%F输出所在的类文件名,如Client.java
%L输出行号
%M输出所在方法名
%l输出语句所在的行数, 包括类名、方法名、文件名、行数

RollingRandomAccessFile的属性

属性含义
fileName指定当前日志文件的位置和文件名称
filePattern指定当发生Rolling时,文件的转移和重命名规则
SizeBasedTriggeringPolicy指定当文件体积大于size指定的值时,触发Rolling
DefaultRolloverStrategy指定最多保存的文件个数
TimeBasedTriggeringPolicy这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。