最近负责的项目,需要新对接一个第三方api,在对接编码过程中肯定少不了日志的输出,避免上了生产环境出问题排查困难, 由于这个项目已经在线上运作了有2-3年了,各种业务、非业务、框架灯日志都集中在一个文件,并且查看了下生产环境的最近几个日志文件,发现一天的日志接近2个G,如果需要查看新对接的第三方api业务日志,比较麻烦。因此希望可以把这些和第三方对接的日志生成在另外一个单独的文件。这也就是标题中的实现按业务输出日志到不同的文件,下面开始讲解具体的实现方案。
一、方案
二、具体实现
(1)准备阶段
定义了2个appender,分别为输出到控制台的appender和输出到文件的appender
<appender name="ztripLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/ztrip.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/ztrip.%d{yyyy-MM-dd}.log.bak </fileNamePattern> </rollingPolicy> <encoder> <pattern>${COMMON_LOG_PATTERN}</pattern> </encoder> </appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> <!--[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %-5level %logger{50} - %msg%n--> ${COMMON_LOG_PATTERN} </pattern> <charset>UTF-8</charset> </encoder> </appender>
默认日志级别为info,默认引用了上面定义的这个2个appender
<logger name="ztripLog" additivity="false" level="INFO"> <appender-ref ref="ztripLogAppender"/> <appender-ref ref="CONSOLE"/> </logger>
(2)代码引用
通过lombok提供的注解,指定上面配置好的logger name
@Slf4j(topic = "ztripLog")
通过LoggerFactory去创建
private final static Logger ztripLogger = LoggerFactory.getLogger(ZtripConstants.ZTRIP_LOG_NAME);
(3)效果如下