欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LogBack配置

程序员文章站 2022-07-03 17:34:27
...

LogBack介绍

Logback是由log4j创始人设计的另一个开源日志组件。目前主要有以下三个组件

  • logback-core:基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
    官方网站

配置介绍

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"></timestamp>
    <!-- 定义常量属性 -->
    <property name="name" value="recommend_web"></property>
    <property name="CONSOLE_LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35} - %msg %n"></property>
    <!-- 配置上下文名称 -->
    <contextName>${name}</contextName>
    <!-- 输出到控制台 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 格式化日志内容 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern></pattern>
        </encoder>
    </appender>
    <!-- 把日志添加到文件 -->
    <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
        <!-- 被写入的文件名,可以是相对目录,也可以是绝对目录,没有默认值 -->
        <file>F:\logs\test.log</file>
        <!-- true-日志追加到文件结尾,false-清空现存文件,默认为true -->
        <append>true</append>
        <!-- 对日志内容格式化 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <!-- true-日志安全的写入文件,效率低,默认为false -->
        <prudent>false</prudent>
    </appender>
    <!-- 滚动记录文件 -->
    <appender name="rollingAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>F:\rollLog\logFile.log</file>
        <!--
        TimeBasedRollingPolicy</font>:根据时间制定滚动策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档文件格式 -->
            <fileNamePattern>
                logFile.%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <!-- 归档文件最大数量 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--
        SizeBasedTriggeringPolicy:根据文件制定滚动策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!-- 活动文件大小,如果超过当前大小,则触发滚动,默认为10MB -->
            <maxFileSize>5MB</maxFileSize>
        </rollingPolicy>
        <!--
        FixedWindowRollingPolicy:根据固定窗口算法制定滚动策略
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <!-- 活动文件大小,如果超过当前大小,则触发滚动,默认为10MB -->
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
            <!-- 归档文件格式,必须包含%i,表示当前文件索引 -->
            <fileNamePattern>
                logFile.%d{yyyy-MM-dd}.log
            </fileNamePattern>
        </rollingPolicy>
        <!-- 告知 RollingFileAppender 何时**滚动,跟FixedWindowRollingPolicy搭配使用 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
            <maxFileSize>5MB</maxFileSize> 
        </triggeringPolicy>
        <!-- 设置大小,跟TimeBasedRollingPolicy搭配使用,表示按日期、文件大小记录日志,文件名引用%i表示索引 -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>100MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
        <!-- 级别过滤器,根据日志级别进行过滤 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置过滤级别 -->
            <level>ERROR</level>
            <!-- 用于配置符合过滤条件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 临界值过滤器,过滤掉低于指定临界值的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 设置过滤级别 -->
            <level>ERROR</level>
        </filter>
    </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="rollingAppender"/>
    </appender>
    <!-- 
        用来设置某一个包或具体某一个类的日志打印级别,可以有多个logger配置 
        level:指定级别,不写则继承上级的级别
        addtivity:是否向上级logger传递打印信息,默认为true
    -->
    <logger name="com.log.controller.LogController" level="INFO" addtivity="false">
        <!-- 输出源,可以有多个,引用appender标签的name -->
        <appender-ref ref="fileAppender"/>
    </logger>
    <!-- logger根元素,是所有logger元素的上级,只有一个level属性,默认为DEBUG -->
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>
复制代码

Logback输出日志是从子节点开始,子节点如果有输出源直接输出,如果无,判断配置的addtivity,是否像上级传递,即是否向root传递,传递则采用root的输出源,否则不输出日志。
如果logger采用root的输出源,则根root的level无关,比如:logger的level为INFO,root的level为ERROR,如果日志打印为info级别日志,也一样会打印出来,向上级传递只是使用root节点的输出源。

springboot下logback配置

官方推荐使用的xml名字的格式为:logback-spring.xml而不是logback.xml,至于为什么,因为带spring后缀的可以使用<springProfile>这个标签。通过springProfile标签,可以让日志在不同的环境下打印不同的日志。比如可以通过包裹logger和root标签,示例如下:
<!-- name表示当前的环境,可以配置多个,比如test-测试 prod-生产 -->
<springProfile name="dev">
    <logger name="com.log.controller.LogController" level="INFO" addtivity="false">
        <appender-ref ref="fileAppender"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
    </root>
<springProfile>
复制代码

转载于:https://juejin.im/post/5cc54d9f6fb9a032435db0cc