springboot整合log4j的踩坑实战记录

2023-01-21 0 1,180

目录

1、依赖添加

 1.1、添加依赖

需要引入 log4j 的依赖支持,推荐自己确定使用的版本。

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.11.2</version>
</dependency>

 1.2、剔除依赖

springboot 默认自己内部添加了对日志的支持,需要将其全部剔除掉,不然会影响 log4j 的依赖使用。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
        <exclusions>
            <exclusion>
               <groupId>*</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
</dependency>

2、配置日志

 2.1、日志打印记录

 根据自己的需求进行相关的配置,这里需要注意的是使用 xml 文件进行配置,使用 properties 有坑没爬起来,文件名自定义,没有啥要求,都会在配置文件中进行指定的。

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<configuration  scan=\"true\" scanPeriod=\"10 seconds\">
    <contextName>beordie</contextName>
    <property name=\"path\" value=\"E:\\file\\javalearn\\blog\\src\\main\\resources\\logs\" />
    <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=\"${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}\"/>

    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">
        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name=\"DEBUG_FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">
        <file>${path}/debug.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">
            <fileNamePattern>${log}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP\">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name=\"INFO_FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">
        <file>${log}/info.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">
            <fileNamePattern>${log}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP\">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name=\"WARN_FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">
        <file>${log}/warn.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">
            <fileNamePattern>${log}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP\">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name=\"ERROR_FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">
        <file>${log}/error.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">
            <fileNamePattern>${log}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP\">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <filter class=\"ch.qos.logback.classic.filter.LevelFilter\">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <springProfile name=\"dev\">
        <logger name=\"com.beordie\" level=\"debug\"/>
    </springProfile>

    <root level=\"info\">
        <appender-ref ref=\"CONSOLE\" />
        <appender-ref ref=\"DEBUG_FILE\" />
        <appender-ref ref=\"INFO_FILE\" />
        <appender-ref ref=\"WARN_FILE\" />
        <appender-ref ref=\"ERROR_FILE\" />
    </root>
</configuration>

 2.2、指定配置文件

还需要在 spring boot 的项目配置文件中进行配置的指定。

logging:
  config: classpath:log4j.xml

到这里完成对日志的整体配置,启动项目通过下面语句拿到日志对象即可进行日志的打印输出。

private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);

补充:log4j调优和注意事项

日志模式-同步/异步

log4j2提供了AsyncAppender和AsyncLogger以及全局异步,开启方式如下:

  • 同步模式:默认配置即为同步模式,即没有使用任何AsyncAppender和AsyncLogger。
  • 全局异步:配置按照同步方式配,通过添加jvm启动参数即可开启全局异步,无需修改配置和应用。
  • 混合异步:使用异步Logger和同步Logger的混合配置,且不开启全局异步,即Logger配置中部分AsyncLogger,部分Logger。

日志模式使用注意事项:

  • 如果使用异步,建议使用AsyncLogger实现而不是AsyncAppender。
  • 如果使用同步,AsyncLogger、AsyncAppender和全局异步只能使用一种,不可以同时配置AsyncAppender和AsyncLogger,或者配置了异步的情况下启用了全局异步。

日志滚动和清除策略

log4j2提供了基于文件大小的滚动策略和基于时间的滚动策略,也可以二者并用,这里给出基于大小的滚动策略配置和基于大小/时间双滚动策略配置:

  • 基于大小的滚动策略:按照大小滚动,启用压缩,并最多保留N个文件
  • 基于大小/时间双滚动滚动策略:按照大小和时间滚动,启用压缩,单位时间内控制最多保留日志个数并控制总的日志留存时间。

总结

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 springboot整合log4j的踩坑实战记录 http://www.20zxx.cn/463448/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务