清茶书香

一杯清茶,一本书籍,一个下午。


  • 首页

  • 归档

  • 分类

  • 关于

  • 搜索
Redis JPA Solr SpringData SpringMVC localRepository local Mapper 事务 Mybatis JDBC AOP DI IOC 常用函数 触发器 存储过程 Promise Gateway SpringCloud vue-cli axios es6 webpack npm vue 个性化 zsh 终端 caffeine jvm缓存 guava cache validation Mapping MapStruct comment 小程序 建站 WeHalo config logback plugins database idea maven spring https http nginx password RabbitMQ 秒杀系统 Windows MySQL 数据备份 halo SpringBoot shell Linux ip Optional Stream Lambda k8s Docker 列编辑 vim MacOS 图片合成 Java 远程联调 nps 内网穿透

springboot中logback的配置

发表于 2020-12-05 | 分类于 springboot | 2 | 阅读次数 283

在springboot中默认使用的日志就是logback,默认配置一般是够用了,但如果还想更加详细的配置就需要使用我们重新配置logback了。

使用springboot配置logback

这种是只使用springboot提供的application.properties来配置logback。

以下配置大多为默认配置

logging:
  file:
#生成的文件最多存留多久
    max-history: 30
#生成的文件最大大小
    max-size: 100MB
#日志文件存储路径
    path: ./logs/${spring.application.name}
#是否在系统重启时清空日志文件里的内容
    clean-history-on-start: false
#日志文件名,在当前文件夹内生成,与logging.file.path使用其一即可
#    name: ${spring.application.name}.log
#生成的总日志文件大小
    total-size-cap: 10GB
#日志级别
  level:
#总级别
    root: info
#特殊包的级别
    org.apache.ibatis: debug
  pattern:
    rolling-file-name: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
    console: %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}
    file: '%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}'
    dateformat: yyyy-MM-dd HH:mm:ss.SSS
    level: %5p

使用logback配置文件

logback给我们提供了四种配置文件

  • logback.xml
  • logback-spring.xml
  • logback.groovy
  • logback-spring.groovy

logback配置在springboot中的加载顺序是logback.xml->application.properties->logback-spring.xml

在logback-spring.xml中我们可以使用Spring里配置,所以推荐使用这种方式来配置logback。
下面我提供两种可用于生产环境的配置,看你们的使用习惯来选择

所有级别日志在同一个文件内出现

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
<!-- 由于系统刚启动时还未加载application配置,因此最好配置默认值 -->
    <contextName>${APP_NAME}</contextName>
    <springProperty name="APP_NAME" scope="context" source="spring.application.name" defaultValue="log-demo"/>
    <springProperty name="LOG_FILE" scope="context" source="logging.file.path" defaultValue="./logs/${APP_NAME}"/>
    <springProperty name="LOG_MAX_FILE_SIZE" scope="context" source="logging.max-size" defaultValue="100MB"/>
    <springProperty name="LOG_MAX_FILE_DAY" scope="context" source="logging.file.max-history" defaultValue="30"/>
    <springProperty name="ServerIP" scope="context" source="spring.cloud.client.ip-address" defaultValue="0.0.0.0"/>
    <springProperty name="ServerPort" scope="context" source="server.port" defaultValue="0000"/>
    <springProperty name="TotalSizeCap" scope="context" source="logging.file.total-size-cap" defaultValue="5GB"/>

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!-- 彩色日志格式 -->
<!--格式化输出:%X的内容需要自己在项目内添加(比如拦截器内等),%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%PID进程号,%logger{36}表示类路径仅显示36个字符,%M表示方法名,%line表示输出行号,%m:日志消息,%n是换行符-->
    <property name="CONSOLE_LOG_PATTERN"
              value=" [${APP_NAME}:${ServerIP}:${ServerPort}] [%clr(%X{traceId}){yellow},%clr(%X{X-B3-TraceId}){yellow}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%thread]){orange} %clr(%logger{36}#%M){cyan} %clr([line-%line]){red} - %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <!-- 正常颜色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN_NO_COLOR"
              value=" [${APP_NAME}:${ServerIP}:${ServerPort}] [%X{traceId},%X{X-B3-TraceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} [%thread] %logger{36}#%M [line-%line] - %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>


    <!-- Console 输出设置 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_FILE}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>${LOG_MAX_FILE_DAY}</maxHistory>
            <!-- 保留的总文件的最大大小 -->
            <totalSizeCap>${TotalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 异步输出 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>

    <springProfile name="dev,test">
        <root level="INFO">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="CONSOLE"/>
        </root>
        <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        </logger>
        <logger name="com.bennett.demo" level="DEBUG"/>
    </springProfile>
    <springProfile name="prod">
        <root level="WARN">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>
</configuration>

每个级别日志单独存储

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>${APP_NAME}</contextName>

    <springProperty name="APP_NAME" scope="context" source="spring.application.name" defaultValue="log-demo"/>
    <springProperty name="LOG_FILE" scope="context" source="logging.file.path" defaultValue="./logs/${APP_NAME}"/>
    <springProperty name="LOG_MAX_FILE_SIZE" scope="context" source="logging.max-size" defaultValue="100MB"/>
    <springProperty name="LOG_MAX_FILE_DAY" scope="context" source="logging.file.max-history" defaultValue="30"/>
    <springProperty name="ServerIP" scope="context" source="spring.cloud.client.ip-address" defaultValue="0.0.0.0"/>
    <springProperty name="ServerPort" scope="context" source="server.port" defaultValue="0000"/>
    <springProperty name="TotalSizeCap" scope="context" source="logging.file.total-size-cap" defaultValue="5GB"/>

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="[${APP_NAME}:${ServerIP}:${ServerPort}] [%clr(%X{traceId}){yellow},%clr(%X{X-B3-TraceId}){yellow}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%thread]){orange} %clr(%logger{36}#%M){cyan} %clr([line-%line]){red} - %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <!-- 正常颜色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN_NO_COLOR"
              value="[${APP_NAME}:${ServerIP}:${ServerPort}] [%X{traceId},%X{X-B3-TraceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} [%thread] %logger{36}#%M [line-%line] - %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>


    <!-- 控制台日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <withJansi>true</withJansi>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成常规日志文件 -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}/${APP_NAME}-error.log</file>
        <!-- 基于时间的分包策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>${LOG_MAX_FILE_DAY}</maxHistory>
            <!-- 保留的总文件的最大大小 -->
            <totalSizeCap>${TotalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${LOG_MAX_FILE_SIZE}</MaxFileSize>
        </triggeringPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 按照每天生成常规日志文件 -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}/${APP_NAME}-info.log</file>
        <!-- 基于时间的分包策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}/${APP_NAME}-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>${LOG_MAX_FILE_DAY}</maxHistory>
            <!-- 保留的总文件的最大大小 -->
            <totalSizeCap>${TotalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 按照每天生成常规日志文件 -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}/${APP_NAME}-debug.log</file>
        <!-- 基于时间的分包策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}/${APP_NAME}-debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>${LOG_MAX_FILE_DAY}</maxHistory>
            <!-- 保留的总文件的最大大小 -->
            <totalSizeCap>${TotalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 按照每天生成常规日志文件 -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}/${APP_NAME}-warn.log</file>
        <!-- 基于时间的分包策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}/${APP_NAME}-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>${LOG_MAX_FILE_DAY}</maxHistory>
            <!-- 保留的总文件的最大大小 -->
            <totalSizeCap>${TotalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 异步输出 -->
    <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志.设为0可保存全部-->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="ERROR"/>
    </appender>
    <appender name="ASYNC-WARN" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <appender-ref ref="WARN"/>
    </appender>
    <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <appender-ref ref="INFO"/>
    </appender>
    <appender name="ASYNC-DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <appender-ref ref="DEBUG"/>
    </appender>

    <springProfile name="dev,test">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="ASYNC-ERROR"/>
            <appender-ref ref="ASYNC-WARN"/>
            <appender-ref ref="ASYNC-INFO"/>
            <appender-ref ref="ASYNC-DEBUG"/>
        </root>
        <logger name="com.bennett.demo" level="DEBUG"/>
    </springProfile>

    <springProfile name="prod">
        <root level="WARN">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="ERROR"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="DEBUG"/>
        </root>
    </springProfile>
</configuration>

如果有什么疑问,好的建议欢迎在评论区留言!

Bennett wechat
欢迎收藏我的微信小程序,方便查看更新的文章。
  • 本文作者: Bennett
  • 本文链接: https://hibennett.cn/archives/springboot-logback-config
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# SpringBoot # logback # config
nginx禁止IP直接访问
使用Halo搭建自己博客网站
  • 文章目录
  • 站点概览
Bennett

Bennett

60 日志
28 分类
74 标签
RSS
Github E-mail Gitee QQ
Creative Commons
Links
  • MacWk
  • 知了
0%
© 2020 — 2023 hibennett.cn版权所有
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4

浙公网安备 33010802011246号

    |    浙ICP备2020040857号-1