目录

Log4j2配置

springboot多环境日志配置

参考资料


Log4j2配置

如果你想要在控制台输出美化的日志信息,你可以使用Log4j2的ConsoleAppender和AnsiColorConverter来实现。下面是相应的配置示例:

<Configuration status="WARN">
    <Properties>
        <Property name="logPath">/path/to/logs</Property>
    </Properties>

    <Appenders>
        <Routing name="RoutingAppender">
            <Routes pattern="$${ctx:loggerType}">
                <Route key="info" ref="InfoFileAppender">
                    <Filters>
                        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                    </Filters>
                </Route>
                <Route key="error" ref="ErrorFileAppender">
                    <Filters>
                        <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                    </Filters>
                </Route>
            </Routes>
        </Routing>

        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue, TRACE=blue}" />
        </Console>

        <RollingFile name="InfoFileAppender" fileName="${logPath}/info.log"
                     filePattern="${logPath}/info-%d{yyyy-MM-dd-HH}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="24">
                <Delete basePath="${logPath}">
                    <IfFileName glob="info-*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
            <Actions>
                <GZCompress>
                    <IfLastModified age="7d"/>
                </GZCompress>
            </Actions>
        </RollingFile>

        <RollingFile name="ErrorFileAppender" fileName="${logPath}/error.log"
                     filePattern="${logPath}/error-%d{yyyy-MM-dd-HH}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="24">
                <Delete basePath="${logPath}">
                    <IfFileName glob="error-*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
            <Actions>
                <GZCompress>
                    <IfLastModified age="7d"/>
                </GZCompress>
            </Actions>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="RoutingAppender"/>
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

在这个配置中,我们定义了两个RollingFile appender,分别用于info日志和error日志。每个appender都有自己的文件名、文件模式、时间触发策略和滚动策略。同时,我们使用了DeleteAction来保持每个类型的日志文件在7天内,并使用GZCompressAction在满足条件后进行压缩。

使用RoutingAppender可以根据Logger的上下文信息将日志路由到不同的appender。在这个示例中,我们使用"loggerType"作为Routing key,并在Routes元素内定义了两个Route,分别将"info"和"error"路由到对应的appender。

最后,我们将RoutingAppender作为Root logger的Appender引用,以便所有日志都能正确路由到相应的appender。

请根据实际需求修改logPath配置属性,将日志存储在适当的位置。另外,你可以通过修改DeleteAction的条件来实现按照3个月删除文件的需求。例如,可以将<IfLastModified age="7d" />改为<IfLastModified age="90d" />

springboot多环境日志配置

在Spring Boot多环境下,可以为不同环境分别配置不同的Log4j2配置文件,使用Spring Boot提供的`logging.config`配置项指定当前环境下使用的Log4j2配置文件。

首先,在项目的resources目录下创建多个Log4j2配置文件,以application-{profile}.yml(或application-{profile}.properties)命名,其中{profile}为环境名称,如application-dev.yml、application-test.yml和application-prod.yml。

接着,在Spring Boot的配置文件(如application.yml)中,指定`logging.config`配置项的值为当前环境下使用的Log4j2配置文件路径。例如:

```yaml
 spring:
   profiles:
     active: dev
   application:
     name: myapp
   main:
     allow-bean-definition-overriding: true
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8logging:
   config: classpath:log4j2-${spring.profiles.active}.xml
 ```

在上面的配置中,我们将`logging.config`配置项的值设置为`classpath:log4j2-${spring.profiles.active}.xml`,即使用当前激活的环境对应的Log4j2配置文件。这里使用了`${spring.profiles.active}`EL表达式获取当前激活的环境名称。

最后,在Log4j2配置文件中,可以使用`${sys:property}`获取系统属性,例如`${sys:logPath}`获取名为`logPath`的系统属性。也可以使用`${ctx:variableName}`获取Log4j2上下文变量。

例如,在Log4j2配置文件中,可以使用以下方式获取当前环境对应的配置项:

```xml
 <Configuration>
     <Properties>
         <Property name="logPath">${sys:logPath}</Property>
     </Properties>    <!-- 定义Appenders和Loggers -->
 </Configuration>
 ```

在上面的配置中,我们使用`${sys:logPath}`获取名为`logPath`的系统属性。

这样,就可以实现在Spring Boot多环境下使用Log4j2的配置了。

参考资料

log4j2 的使用【超详细图文】

log4j2 实际使用详解