目录
如果你想要在控制台输出美化的日志信息,你可以使用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" />
。
在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+8
logging:
? 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的配置了。