【问题标题】:How to add a rolling file logger to SpringBoot?如何将滚动文件记录器添加到 Spring Boot?
【发布时间】:2020-06-15 16:31:37
【问题描述】:

我正在使用这个很好的例子来学习 SpringBoot here。

但我想学习如何添加到这个项目中的一件事是RollingFileAppender。

在我以前的项目中,我总是这样做:

1) 添加了这些依赖项

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

2) 在src/main/resources文件夹中添加如下文件log4j.properties。

# Root logger option
log4j.rootLogger=INFO, stdout, loggerId

log4j.appender.loggerId=org.apache.log4j.RollingFileAppender  
log4j.appender.loggerId.layout=org.apache.log4j.PatternLayout  
log4j.appender.loggerId.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n  
log4j.appender.loggerId.File=logs/app.log
log4j.appender.loggerId.MaxFileSize=100MB
log4j.appender.loggerId.MaxBackupIndex=30

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Silence unnecessary logs
log4j.logger.net.schmizz=OFF
log4j.logger.io.javalin=OFF
log4j.logger.net.dv8tion.jda.core.requests=OFF

3) 在代码中我可以调用记录器:

private Logger LOG = LoggerFactory.getLogger(<class>)

(...)

LOG.info("logging a message")

这会将日志抛出到控制台,以及一个名为logs/app.log 的滚动文件,最大大小为 100MB(如属性文件中所定义)。

在我上面在 GitHub 中链接的现代 SpringBoot 项目中,这样做的正确方法是什么,可能使用 SpringBoot 附带的记录器?

谢谢!

【问题讨论】:

  • 如果没坏,就不要修了

标签: spring spring-boot logging log4j slf4j


【解决方案1】:

在 Spring Boot 中登录与在普通 Java 项目中没有根本不同。 Spring Boot 使用 Commons Logging 进行所有内部日志记录,但保持底层日志实现打开。为 Java Util Logging、Log4J2 和 Logback 提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。默认情况下,如果使用“Starters”,则使用 Logback 进行日志记录。1

如果你想坚持使用 Log4J2,你必须排除默认的 Logback 依赖并包含 Log4J2:

<!-- exclude logback , add log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</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>

然后在src/main/resources中添加一个名为log4j2.xml或(log4j2.properties)的新文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="loggerId" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/app.log"/>
        <param name="MaxBackupIndex" value="30"/>
        <param name="MaxFileSize" value="100MB"/>
        <layout class="org.apache.log4j.PatternLayout  ">
            <param name="ConversionPattern" value="%d [%t] %-5p (%F:%L) - %m%n"/>
        </layout>
    </appender>
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </layout>
    </appender>
    <logger name="io.javalin">
        <level value="OFF"/>
    </logger>
    <logger name="net.dv8tion.jda.core.requests">
        <level value="OFF"/>
    </logger>
    <logger name="net.schmizz">
        <level value="OFF"/>
    </logger>
    <root>
        <level value="INFO"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="loggerId"/>
    </root>
</configuration>

如需了解更多信息,baeldung.com 是我的最佳去处,可以获得有关如何执行此操作的实用教程。由于您专门询问有关 Rolling File Appenders 的建议,我推荐A Guide to Rolling File Appenders。 Logging in Spring Boot 上还有一篇更通用的文章。

就个人而言,我喜欢使用Lombok annotations 和@Slf4j 一样来摆脱日志样板并防止复制和粘贴错误。

代码开启!

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2018-01-14
    相关资源
    最近更新 更多