Log4j2动态配置保存路径

1,234 阅读1分钟

在bom中统一管理日志版本(这个配置要放在第一位)

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-bom</artifactId>
    <version>${log4j.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

项目中使用log4j2

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off" monitorInterval="10" packages="org.apache.logging.log4j.core,io.sentry.log4j2">
    <properties>
        <property name="LOG_HOME">/data/logs/${env:logName}</property>
        <property name="COMMON_FILE_NAME">${env:logName}</property>
        <property name="MAX_FILE_SIZE" value="500MB"></property>
        <property name="MAX_FILE_COUNT" value="5"></property>
        <Property name="FILE_LOG_PATTERN"
                  value="%date{yyyy-MM-dd HH:mm:ss.SSS} [%traceId]  %level [%thread][%file:%line]  - %msg%n"></Property>
    </properties>

    <Appenders>
        <!-- 增加 sentry 监听 -->
        <Sentry name="Sentry"/>
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 1.1、增加 traceId 配置项 -->
            <PatternLayout
                    pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%traceId] %level [%thread][%file:%line] - %msg%n"/>
            <ThresholdFilter level="info" onMatch="ACCEPT"
                             onMismatch="DENY"/>
        </Console>
        <!-- 2、配置日志级别、文件名、文件格式、文件路径 -->
        <RollingRandomAccessFile name="FILE-INFO" fileName="${LOG_HOME}/${COMMON_FILE_NAME}-info.log"
                                 filePattern="${LOG_HOME}/%date{yyyy-MM-dd}/${COMMON_FILE_NAME}-%i-info.log">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${FILE_LOG_PATTERN}" charset="UTF-8"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
            </Policies>
            <!--保存日志文件个数-->
            <DefaultRolloverStrategy max="${MAX_FILE_COUNT}"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="FILE-ERROR" fileName="${LOG_HOME}/${COMMON_FILE_NAME}-error.log"
                                 filePattern="${LOG_HOME}/%date{yyyy-MM-dd}/${COMMON_FILE_NAME}-%i-error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${FILE_LOG_PATTERN}" charset="UTF-8"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
            </Policies>
            <!--保存日志文件个数-->
            <DefaultRolloverStrategy max="${MAX_FILE_COUNT}"/>
        </RollingRandomAccessFile>

    </Appenders>
    <Loggers>
        <AsyncRoot level="info" includeLocation="true">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="FILE-INFO"/>
            <AppenderRef ref="FILE-ERROR"/>
            <AppenderRef ref="Sentry" level="WARN"/>
        </AsyncRoot>
    </Loggers>
</Configuration> 

${env:logName} 代表从环境变量中获取值

这里看log4j2支持的动态获取方式

image.png

image.png