Lombok插件内置有 @Slf4j 和 @Log4j / @Log4j2 两种日志注解,注解后可直接调用 log.info()、log.warn()等方法输出信息到日志,
但是我的项目中配置了两个不同的日志输出Appender
1 <Appenders> 2 <Console name="Console" target="SYSTEM_OUT"> 3 <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 4 </Console> 5 <!-- 系统日志--> 6 <RollingFile name="RollingFile" fileName="${baseDir}/logs/${date:yyyy-MM-dd}.log" 7 filePattern="${baseDir}/logs/${date:yyyy-MM}/${date:YYYY-MM-dd}-fargo.log.zip"> 8 <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" /> 9 <Policies> 10 <OnStartupTriggeringPolicy /> 11 <SizeBasedTriggeringPolicy size="10 MB" /> 12 </Policies> 13 <DefaultRolloverStrategy max="20" /> 14 </RollingFile> 15 <!-- 手机短信日志--> 16 <RollingFile name="SMSRollingFile" fileName="${baseDir}/logs/${date:yyyy-MM-dd}-sms.log" 17 filePattern="${baseDir}/logs/${date:yyyy-MM}/sms/${date:YYYY-MM-dd}-sms-fargo.log.zip"> 18 <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%-5p] %msg%n" /> 19 <Policies> 20 <OnStartupTriggeringPolicy /> 21 <SizeBasedTriggeringPolicy size="10 MB" /> 22 </Policies> 23 <DefaultRolloverStrategy max="20" /> 24 </RollingFile> 25 </Appenders>
1 <Loggers> 2 <Root level="INFO"> 3 <AppenderRef ref="RollingFile" /> 4 </Root> 5 <Logger name="SMSLogger" additivity="false" level="INFO"> 6 <appender-ref ref="SMSRollingFile" level="INFO"/> 7 </Logger> 8 </Loggers>
在不使用Lombok的情况下一般是通过调用 LoggerFactory 的getLogger()方法来获取对应 Appender 的对象,
Logger logger = LoggerFactory.getLogger("SMSLogger");
使用Lombok插件后可直接调用,但是如果需要输出到指定的 Appender 中的话,需要将 @Slf4j 或 @Log4j / @Log4j2 中 topic 参数的值设置为对应的Logger的name值。
比如,我要将日志通过SMSLogger输出,那么就应该做如下配置
@Log4j2(topic = "SMSLogger") static class TestLog { public static void test() { Logger logger = LoggerFactory.getLogger("SMSLogger"); log.error("测试Lombok日志注解 - Lombok"); logger.error("测试Lombok日志注解 - LoggerFactory"); } }
查看对应文件2021-08-14-sms.log
成功输出