【开发经验】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"/>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁滴水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值