Log4j 线上生产配置

Log4j 线上生产配置

该配置可自动分包 info日志文件
可自动打包 error warn debug 等日志 zip 文件

1. 前置需求

需在SringBoot 下 配置好 spring.application.name

application.yml 中需要配置 logging.level.root=info/debug/error/warn

同时 分开 四个部署环境 local/dev/test/prod

2. XML 代码

<configuration>

    <!-- ========================== 自定义输出格式说明================================ -->
    <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
    <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数  -->
    <!-- %c 输出所属的类目,通常就是所在类的全名 -->
    <!-- %t 输出产生该日志事件的线程名 -->
    <!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
    <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  -->
    <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlo4.main(TestLog4.java:10)  -->
    <!-- ========================================================================== -->

    <!-- ========================== 输出方式说明================================ -->
    <!-- Log4j提供的appender有以下几种:  -->
    <!-- org.apache.log4j.ConsoleAppender(控制台),  -->
    <!-- org.apache.log4j.FileAppender(文件),  -->
    <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
    <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->
    <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->
    <!-- ========================================================================== -->

    <!--日志格式应用spring boot默认的格式,也可以自己更改-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <springProperty scope="context" name="app_name" source="spring.application.name" defaultValue="power-up-safeguard"/>
    <springProperty scope="context" name="log_level" source="logging.level.root"/>
    <springProperty scope="context" name="file_path" source="logging.file.path" defaultValue=""/>

    <property name="log_path" value="${file_path}logs/${app_name}"/>
    <property name="file_size" value="64MB"/>
    <property name="file_count" value="50"/>
    <property name="maxHistory" value="15"/>
    <!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 -->
    <property name="queueSize" value="512"/>

    <!-- 控制台日志 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志文件的格式 -->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- DEBUG文件日志 -->
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${log_path}/${app_name}_debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_path}/history/${app_name}_debug.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志 -->
        <append>true</append>
    </appender>

    <!-- INFO文件日志 -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>

        <file>${log_path}/${app_name}_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天一归档 -->
            <fileNamePattern>${log_path}/history/${app_name}_info.log.%d{yyyy-MM-dd}_%i.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 最大64MB 超过最大值,会重新建一个文件 -->
                <maxFileSize>${file_size}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%thread] %logger{50}-%L %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志 -->
        <append>true</append>
    </appender>

    <!-- 警告文件日志 -->
    <appender name="FILE_WARN"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${log_path}/${app_name}_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_path}/history/${app_name}_warn.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>

        <encoder  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志 -->
        <append>true</append>
    </appender>

    <!-- 错误文件日志 -->
    <appender name="FILE_ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${log_path}/${app_name}_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_path}/history/${app_name}_error.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <!-- 追加方式记录日志 -->
        <append>true</append>
    </appender>

    <appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_DEBUG"/>
    </appender>

    <appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_INFO"/>
    </appender>

    <appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_WARN"/>
    </appender>

    <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>${queueSize}</queueSize>
        <appender-ref ref="FILE_ERROR"/>
    </appender>


    <!-- local环境,只输出控制台日志 -->
    <springProfile name="local">
        <root level="${log_level}">
            <appender-ref ref="consoleAppender" />
        </root>
    </springProfile>

    <!-- dev环境 -->
    <springProfile name="dev">
        <root level="${log_level}">
            <appender-ref ref="consoleAppender" />
            <appender-ref ref="ASYNC_LOG_INFO" />
            <appender-ref ref="ASYNC_LOG_ERROR" />
        </root>
    </springProfile>

    <!-- test环境 -->
    <springProfile name="test">
        <root level="${log_level}">
            <appender-ref ref="consoleAppender" />
            <appender-ref ref="ASYNC_LOG_INFO" />
            <appender-ref ref="ASYNC_LOG_ERROR" />
        </root>
    </springProfile>

    <!-- prod环境 -->
    <springProfile name="prod">
        <root level="${log_level}">
            <appender-ref ref="consoleAppender" />
            <appender-ref ref="ASYNC_LOG_INFO" />
            <appender-ref ref="ASYNC_LOG_ERROR" />
        </root>
    </springProfile>

</configuration>

本文由 在码圈 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
原文链接:https://www.bedebug.com/archives/log4j
最后更新于:2021-09-18 13:58:17

请博主喝咖啡 ☕.