Logback日志

基础日志

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

    <!-- 定义参数,后面可以通过${APP_NAME}使用 -->
    <property name="APP_NAME" value="sample"/>
    <!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
    <!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
    <property name="LOG_PATH" value="./logs"/>
    <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
    <property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 文件输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>


    <!--rootLogger是默认的logger-->
    <root level="INFO">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!--应用日志-->
    <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
    <logger name="cn.com.wind" level="DEBUG"/>
    <logger name="com.alibaba.cola" level="DEBUG"/>
    <logger name="com.alibaba.cola.file" level="DEBUG"/>
    <logger name="com.alibaba.cola.report" level="DEBUG"/>
    <logger name="com.alibaba.cola.dictionary" level="DEBUG"/>
    <logger name="com.alibaba.cola.logging" level="DEBUG"/>
    <logger name="com.alibaba.cola.systemlog" level="DEBUG"/>
    <logger name="com.alibaba.cola.property" level="DEBUG"/>

    <!--数据库日志-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="com.apache.ibatis" level="TRACE" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>
</configuration>

根据环境生效、日志继承

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

       <property name="TEST_LOG_FILE" value="${LOG_PATH}/test.log"/>

       <appender name="TEST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${TEST_LOG_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${BUSS_LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        </appender>  

        <appender name="KAFKA_LOG_FILE" ..../>

    <!-- 包含dev 分支生效 -->
    <springProfile name="dev">
        <!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
        <!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
        <root level="INFO">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="TEST_FILE"/>
        </root>

        <!--additivity="false"表示不继承root中的配置。默认是true,相当于还有root中配置的两个appender,所以经常出现控制台打两条一样的日志 -->
        <logger name="org.apache.kafka" level="debug" additivity="false">
            <!-- 将kafka日志打印到-->
            <appender-ref ref="KAFKA_LOG_FILE"/>
        </logger>
        
        <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
        <logger name="com.alibaba.cola" level="DEBUG"/>
    </springProfile>

    ....

</configuration>

示例:按照启动分支生效

当时dev环境时,单独再保存一份kafka日志

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

    <!-- 定义参数,后面可以通过${APP_NAME}使用 -->
    <property name="APP_NAME" value="sample"/>
    <!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
    <!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
    <property name="LOG_PATH" value="./logs"/>
    <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
    <property name="KAFKA_FILE" value="${LOG_PATH}/kafka.log"/>
    <property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="KAFKA_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${KAFKA_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${KAFKA_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    
    <!-- 文件输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>


    <!--rootLogger是默认的logger-->
    <root level="INFO">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 包含dev 分支生效 -->
    <springProfile name="dev">
        <!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
        <!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
        <root level="INFO">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
        </root>
        
        <!-- 保存info级别以上的kafka日志 -->
        <logger name="org.apache.kafka" level="info">
            <!-- 除了继承到的控制台与总文件日志,另外保存kafka日志打印到自己的日志文件中-->
            <appender-ref ref="KAFKA_LOG_FILE"/>
        </logger>

        <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
        <logger name="com.alibaba.cola" level="DEBUG"/>
    </springProfile>
    
    
    <!--数据库日志-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="com.apache.ibatis" level="TRACE" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>
</configuration>

示例:把全局warn级别的日志打印到指定文件

使用filter标签!!!!

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

    <!-- 定义参数,后面可以通过${APP_NAME}使用 -->
    <property name="APP_NAME" value="sample"/>
    <!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
    <!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
    <property name="LOG_PATH" value="./logs"/>
    <property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
    <property name="KAFKA_FILE" value="${LOG_PATH}/kafka.log"/>
    <property name="WARN_FILE" value="${LOG_PATH}/warn.log"/>
    <property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="KAFKA_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${KAFKA_FILE}</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${KAFKA_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="WARN_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 定义日志输出的路径-->
        <file>${WARN_FILE}</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
            <!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
            <fileNamePattern>${WARN_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <!-- 达到这个大小后,旧的文件日志将会被异步删除-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    
    <!-- 文件输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>


    <!--rootLogger是默认的logger-->
    <root level="INFO">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 包含dev 分支生效 -->
    <springProfile name="test">
        <!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
        <!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
        <root level="INFO">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="WARN_LOG_FILE"/>
        </root>
        
        <!-- 保存info级别以上的kafka日志 -->
        <logger name="org.apache.kafka" level="info">
            <!-- 除了继承到的控制台与总文件日志,另外保存kafka日志打印到自己的日志文件中-->
            <appender-ref ref="KAFKA_LOG_FILE"/>
        </logger>
    </springProfile>

</configuration>

posted @ 2022-07-17 12:12  小大宇  阅读(4)  评论(0编辑  收藏  举报