第一,重复配置。公司用的是微服务架构,服务很多,每个服务都要配置log4j.xml,配置内容基本都是一样的;但也担心不一样,不同的日志 Pattern 会给日志采集增加难度。
第二,各司其职。减少业务团队对基础日志技术的学习成本,使其专注于业务迭代;
第三,技术演进。抽象出日志组件,统一做日志的配置和升级。主要原因也是 2021-12-10 日发生的Log4j2的版本漏洞。漏洞回顾
控制台输出样式:
文件输出样式:
logging:
level:
com.github.open.casslog.example.ExampleController: warn
com.studeyang.OtherLogger: error或
casslog:
level:
com.github.open.casslog.example.ExampleController: warn
com.studeyang.OtherLogger: error动态修改日志级别需使用Nacos Config,并将casslog.level段配置移动Nacos。可参考示例工程:casslog-example-nacos
第一,配置要扩展的日志:
<Configuration status="WARN">
<Appenders>
<!-- 想在控制台打印,请保留此段 -->
<Console name="Console" target="SYSTEM_OUT" follow="false">
<PatternLayout pattern="${sys:CONSOLE_PATTERN}" />
</Console>
<!-- casslog 扩展日志 -->
<RollingFile name="TEST_EXTEND_LOG" fileName="logs/test-extend.log"
filePattern="logs/$${date:yyyy-MM}/access-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%c{1.}:%4line] - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="256MB"/>
</Policies>
<DefaultRolloverStrategy max="1000"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO"/>
<Logger name="com.casstime.open.xx.ExampleController" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="TEST_EXTEND_LOG"/>
</Logger>
</Loggers>
</Configuration>第二,加载日志扩展文件:
package com.github.open.casslog.example.logextend;
@Component
public class TestLogExtend extends AbstractLogExtend {
@Override
public String logConfig() {
return "classpath:com/github/open/casslog/example/logextend/test-log4j.xml";
}
}可参考示例工程:casslog-example-base
如果两个服务都使用了 Skywalking,那么跨服务间调用将打印 Skywalking traceId。
如果是异步线程,请留意日志中是否打印了 traceId。解决方法见。
Casslog 对低于 2.16.0 log4j 版本会进行检测。




