我的log4j2.xml文件:
<Configuration status="debug">
<appenders>
<Console name="LogToConsole">
<PatternLayout disableAnsi="false" pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %X{api-interaction-id} %style{%C{1.}}{bright,yellow} : %msg%n%throwable" />
</Console>
<RollingFile>
<name>infoLogs</name>
<fileName>/usr/${logPath}/info_log.log</fileName>
<filePattern>/usr/${logPath}/$${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz</filePattern>
<PatternLayout pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %X{api-interaction-id} %style{%c{1.}}{bright,yellow} : %msg%n%throwable" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50MB" />
</Policies>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
</RollingFile>
</appenders>
<Loggers>
<Logger name="com.demo" level="debug" additivity="false">
<AppenderRef ref="infoLogs" level="debug"/>
<AppenderRef ref="LogToConsole" level="debug" />
</Logger>
<Root level="debug">
<AppenderRef ref="LogToConsole" level="debug" />
</Root>
</Loggers>
</Configuration>
它已正确记录在本地位置文件中,例如: 2020-07-08T03:08:10,816 INFO [main] c.f.s.w.Application : Started Application in 131.144 seconds (JVM running for 141.392)
但是在AWS日志中却以某种方式添加了垃圾值: [30m2020-07-09T06:55:16,979[m [32mINFO [m[[1;34mhttp-nio-8080-exec-6[m] [1;33mc.f.c.f.l.LoggerSlf4jImpl[m : Input Request Start:58b2d544-ca8a-45b0-9797-f5d4b79db0b8
需要解决方案吗?
最佳答案
当使用highlight
和style
之类的东西配置输出时,Log4J会将ANSI转义序列添加到输出中。我假设AWS中的示例来自CloudWatch,其中Web控制台 View 不支持呈现ANSI样式。
有一些浏览器插件可以选择转义序列并正确呈现它们。我没有尝试过,所以不能说它们的效果如何。
我建议的另一种选择是在运至AWS的日志中更改ANSI的颜色。即使您找到支持ANSI的日志查看器,如果将来将来需要这些转义序列,也将很难分析日志(例如使用CloudWatch Insights或Elasticsearch)。如果它是用于AWS的控制台附加程序,请将disableAnsi
设置为true
。
关于java - 使用log4j2在AWS日志中记录垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62809860/