一文带你了解 logback 的一些常用配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们可以通过springProfile为不同的环境配置不同的日志输出规则,比如生产环境不开启console,级别为info等 下面来看看示例,

springProfile标签中定义多个环境

我们可以通过springProfile为不同的环境配置不同的日志输出规则,比如生产环境不开启console,级别为info等 下面来看看示例,

logback-spring.xml文件,

<springProfile name="prod">
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</springProfile>
<springProfile name="dev">  
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
    </root>
</springProfile>

然后我们运行应用时,根据指定的spring.profile.active进行选择对应的日志配置,如何来指定运行时激活的profile呢,有很多方式,比如我们可以直接在yml文件中指定,

application.yml文件,

spring:
  profiles:
    active: prod

在程序启动时,可以看到当前激活的profile,

The following profiles are active: prod

还有其它方式,不是本文的重点,就不多说了。

另外, springProfile的name可以包含多个名字,比如

<springProfile name="dev1,dev2,dev3">  
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
    </root>
</springProfile>

ThresholdFilter 日志过滤

首先要说下日志级别的定义,

  • ALL 各级包括自定义级别
  • DEBUG 指定细粒度信息事件是最有用的应用程序调试
  • ERROR 错误事件可能仍然允许应用程序继续运行
  • FATAL 指定非常严重的错误事件,这可能导致应用程序中止
  • INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
  • OFF 这是最高等级,为了关闭日志记录
  • TRACE 指定细粒度比DEBUG更低的信息事件
  • WARN 指定具有潜在危害的情况

它们关系如下:

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。比如,

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>

会过滤掉低于WARN的日志。

我们可以通过这种方式对日志进行分类,比如输出正常日志和错误日志,就可以用类型下面这样的配置,

<!--常规日志-->
    <appender name="fcbox-uniorder" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/app/applogs/test-system.log</File>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [TxId : %X{PtxId} , SpanId : %X{PspanId}] [%logger:%L] %msg%n</pattern>-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %sep[%thread] %sep%p %sep%c %sep[TxId : %X{PtxId} , SpanId : %X{PspanId}] %sep%msgToo%exToo%n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>/app/applogs/test-system.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>
    <!--warn和错误级别日志-->
    <appender name="fcbox-uniorder-error"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/app/applogs/test-system-error.log</File>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [TxId : %X{PtxId} , SpanId : %X{PspanId}] [%logger:%L] %msg%n</pattern>-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %sep[%thread] %sep%p %sep%c.%M \(%F:%L\) %sep[TxId : %X{PtxId} , SpanId : %X{PspanId}] %sep%msgToo%exToo%n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>/app/applogs/test-system-error.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
    </appender>

控制台输出日志

这个比较简单,

<!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<Encoding>UTF-8</Encoding>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [%logger:%L] %msg%n</pattern>
        </encoder>
    </appender>

除了常用的encoder属性,还可以设置target属性,默认是System.out。

引入默认配置

一般springboot项目,我们会在logback.xml中看到这样的配置,

<include  resource="org/springframework/boot/logging/logback/base.xml"/>

这是springboot默认提供的日志配置,我们可以在springboot jar包下看到它的源码,

<included>
  <include resource="org/springframework/boot/logging/logback/defaults.xml" />
  <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
  <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
  <root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE" />
  </root>
</included>

可以看到引入了defaults.xml,console-appender.xml和file-appdender.xml,有兴趣可以通过源码继续了解。这里就不详细说了。

springboot项目配置输出sql

springboot项目已经不需要像以前的SSM一样,类似下面这样配置sql了,

<logger name="org.apache.ibatis" level="INFO"/>
<logger name="java.sql" level="INFO"/>

我们只需要把 root level设置成debug就可以看到mybatis的日志了。但是这样配置日志又太多了,也不好追踪问题。所以我们一般只需要配置dao所在的包就可以了,

<logger name="com.test.dao" level="DEBUG"></logger>

root的level还是info,这样既能看到sql,也不会有其它太多日志干扰。

相关文章
|
SQL 监控 druid
强大的Druid
Druid数据库连接池介绍以及使用步骤
|
机器学习/深度学习 人工智能 数据可视化
数字化提升效能之道 瓴羊One Model构建全面绩效管理体系
数字化提升效能之道 瓴羊One Model构建全面绩效管理体系
374 0
|
存储 前端开发 IDE
YAML语法记录
YAML语法记录
319 0
|
Java API 开发者
Logback简介与配置详解
在开发和维护Spring Boot应用程序时,一个强大而灵活的日志框架是至关重要的。Spring Boot默认集成了Logback,一个高性能的Java日志框架。本文将介绍如何配置Logback以满足你的日志记录需求。
416 1
 Logback简介与配置详解
文本,vitepress如何插入图片,做背景图片的设计,Typora如何设置存放图片的位置
文本,vitepress如何插入图片,做背景图片的设计,Typora如何设置存放图片的位置
|
Java 数据库连接 数据库
解决:Mybatis-plus使用selectList查询数据为null
解决:Mybatis-plus使用selectList查询数据为null
1114 0
解决:Mybatis-plus使用selectList查询数据为null
|
编解码 前端开发 网络协议
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
315 0
|
安全 网络安全
Peer's certificate issuer has been marked as not trusted by the user. 是什么原因导致的
"Peer's certificate issuer has been marked as not trusted by the user" 是一个SSL/TLS错误消息,通常出现在与安全连接的服务器进行握手时。这个错误消息表示用户将证书颁发机构(Certificate Authority,CA)标记为不受信任。 这种情况可能有以下几个原因: 1. 证书过期:证书有一个有效期限,如果证书已经过期,浏览器会将其标记为不受信任。 2. 证书颁发机构不受信任:浏览器内置了一些受信任的证书颁发机构列表,如果服务器使用的证书颁发机构不在该列表中,浏览器会将其标记为不受信任。 3. 自签名证书:如
2080 0
|
机器学习/深度学习 JavaScript 前端开发
「译文」如何在 YAML 中输入多行字符串?
「译文」如何在 YAML 中输入多行字符串?
|
机器学习/深度学习 人工智能 编解码
用 AI 修复亚运珍贵史料——基于Stable Diffusion WebUI 体验AIGC加持的修复能力
2023年,正值亚运110周年,也是第19届杭州亚运会即将举办之际,阿里云与亚奥理事会合作,发起“历久弥新——用 AI 修复亚运会珍贵史料”活动(以下简称“本活动”),开发者使用阿里云的 AI 技术对亚运会历史老照片进行修复,重燃亚运经典,为亚运助威,并有机会入选“亚运史上第一个 AI 修复特展—— 1974 年德黑兰亚运会特展”。
1534 4