【开发经验】SpringBoot日志SLF4j+Logback日志模块化


        如果你看到我这个文章,想必肯定是受到了生产环境查日志的折磨了吧。在生产环境中没有ELK这种日志查询工具时,通过日志的模块化,区分文件,可以更加快速的定位到日志信息。例如:订单日志,请求日志、响应日志、服务间互相调用日志等等。

1、当前类的日志单独保存在一个文件中

如:orderService的日志要单独保存。

@Service		
@Slf4j(topic = "order")
public class OrderServiceImpl{
    
    

}

        在注解中设置topicorder;并且在logback.xml中新增logger标签,设置日志级别为info(日志级别自行设置)。

<logger name="order" level="info">
    <appender-ref ref="api-order"/>
</logger>

        设置其打印位置appenderappender-ref中的ref的值要和appendername属性一致。

<appender name="order" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/order.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 按天回滚  -->
        <fileNamePattern>${log.path}/%d{yyyy-MM-dd}/order.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!-- 日志最大的历史7天 -->
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
    </encoder>
</appender>

        如上设置说明,当天的日志打印在order.log中,历史的日志按天进行保存,最多保存7天的日志。日志的打印格式为log.pattern(为日志的打印格式,网上很多,自行设置即可

2、特定的日志在特定的文件中

        假如想记录整个订单的全部过程,在一个类打印是不行的,因为这个订单的逻辑可能写在多个类中。因此,需要打印多个地方。打印方式如下:

private Logger orderlog = LoggerFactory.getLogger("order");

        通过 LoggerFactory.getLogger方法创建日志对象。传入order表示是一个订单专用打印日志对象。在订单的必要步骤,如创建订单、订单修改等步骤可通过这种方式进行日志打印。

        在logback.xml添加logger。其name也同样要为order。通过appender-ref设置日志打印的位置。与上门appender配置一样,自行配置即可。

<logger name="order" level="info">
    <appender-ref ref="order"/>
</logger>

3.按照模块打印

        订单模块、商品模块、用户模块等按照固定的包名进行日志打印。那订单模块为例,新增一个logger,其nameorder的包的路径,另外新增appender-ref设置其打印路径即可。当name的值为类路径时,表名将此类的日志提取出来。

    <logger name="com.order.service" level="info">
        <appender-ref ref="order"/>
    </logger>

总结

        所有的提取都是围绕与logger标签。其name可以为topic名称、普通名称、包名、类名。

  1. topic名称由注解@Slf4j(topic = “order”)设置。
  2. 普通名称由LoggerFactory.getLogger(“order”)设置。
  3. 包名和类名在logger标签设置即可。

        每个logger标签都可以设置自己的日志基本,一般自己的业务系统的日志级别为info。如果是引用其他的框架的日志级别一般为warn。logback有5种级别,分别是TRACE < DEBUG < INFO < WARN < ERROR

        单独提取到文件的日志默认情况下会与root标签的日志重复。 也就是说logger标签会默认继承与root标签。如果想日志不重复可以设置additivityfalse

<logger name="order" level="info" additivity="false"/>

猜你喜欢

转载自blog.csdn.net/qq_30285985/article/details/120518978
今日推荐