• Spring Boot 学习系列(06)—采用log4j2记录日志


    此文已由作者易国强授权网易云社区发布。


    欢迎访问网易云社区,了解更多网易技术产品运营经验。


    为什么选择log4j2

    • log4j2相比于log4j1.x和logback来说,具有更快的执行速度。同时也支持日志的异步写入。还有很多有趣的特性,大家可以参考官方文档

    • 在这篇文章里,对比描述了log4j2的优点,以及在传统的应用中如何进行日志的升级。在本文主要说下spring boot环境中如果使用lig4j2记录日志。

    • spring boot 默认采用Logback进行日志的记录。当然也是支持log4j的。想要替换,其实很简单,如下代码所示,我们将默认的logback日志依赖移除,加入log4j2的依赖即可。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions></dependency><dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId></dependency>
    • 需要注意的是,如果项目中引入的其他依赖包中也使用了logback,编译时提示错误,以同样的方式将对应的依赖包exclusion即可。

    • 如果我们需要自定义日志记录的格式和内容,我们可以在application.properties文件中指定日志文件的路径,如下所示:

    logging.config=classpath:log4j2.xml
    • 然后在resources下加入log4j2.xml文件,示例如下:

    <?xml version="1.0" encoding="UTF-8"?><configuration status="info">
        <!--先定义所有的appender-->
        <appenders>
            <!--这个输出控制台的配置-->
            <Console name="console" target="SYSTEM_OUT">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
                <!--这个都知道是输出日志的格式-->
                <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
            </Console>
    
            <!-- infoLog日志 -->
            <RollingFile name="infolog" fileName="log/info.log"
                         filePattern="log/info.%d{yyyy-MM-dd}.log">
                <ThresholdFilter level="INFO"/>
                <PatternLayout
                        pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                                               modulate="true"/>
                </Policies>
            </RollingFile>
            <!-- debugLog日志 -->
            <RollingFile name="debuglog" fileName="log/debug.log"
                         filePattern="log/debug.%d{yyyy-MM-dd}.log">
                <ThresholdFilter level="DEBUG"/>
                <PatternLayout
                        pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                                               modulate="true"/>
                </Policies>
            </RollingFile>
            <!-- errorLog日志 -->
            <RollingFile name="errorlog" fileName="log/faerror.log"
                         filePattern="log/faerror.%d{yyyy-MM-dd}.log">
                <ThresholdFilter level="ERROR"/>
                <PatternLayout
                        pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                                               modulate="true"/>
                </Policies>
            </RollingFile>
            <!-- warnLog日志 -->
            <RollingFile name="warnlog" fileName="log/warn.log"
                         filePattern="log/warn.%d{yyyy-MM-dd}.log">
                <ThresholdFilter level="WARN"/>
                <PatternLayout
                        pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                                               modulate="true"/>
                </Policies>
            </RollingFile>
    
            <!--监控相关日志 begin -->
            <RollingFile name="RollingFileHttpTrace" fileName="logs/trace/trace_http.log"
                         filePattern="log/trace/trace_http.log.%d{yyyy-MM-dd}.txt">
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}],%m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
        </appenders>
    
        <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
        <loggers>
    
            <!-- 监控相关日志-->
            <logger name="httpTraceLog" level="INFO" additivity="false">
                <appender-ref ref="RollingFileHttpTrace"/>
            </logger>
    
            <!--建立一个默认的root的logger-->
            <root level="INFO" includeLocation="true">
                <appender-ref ref="errorlog"/>
                <appender-ref ref="warnlog"/>
                <appender-ref ref="infolog"/>
            </root>
        </loggers></configuration>
    • 不足之处,欢迎指正,谢谢~


    免费体验云安全(易盾)内容安全、验证码等服务


    更多网易技术、产品、运营经验分享请点击


    相关文章:
    【推荐】 块存储、文件存储、对象存储这三者的本质差别

  • 相关阅读:
    理解css中min-width和max-width,width与它们之间的区别联系
    html实现时间轴_纯css实现响应式竖着/垂直时间抽布局效果
    web页面的重构和回流【转载】
    介绍web开发中实现会话跟踪的常用技术方法
    web标签语义化的理解_web语义化是什么意思
    从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)
    H5调用手机的相机/摄像/录音等功能 _input:file的capture属性说明
    相邻元素之间的margin合并问题
    HTML连载33-背景定位
    Java连载22-for循环
  • 原文地址:https://www.cnblogs.com/zyfd/p/9883612.html
Copyright © 2020-2023  润新知