如何在Spring Boot中禁用控制台日志记录

2023/05/11

1. 概述

通常,控制台日志使我们有机会以简单直观的方式调试我们的系统。然而,有时我们不想在我们的系统中启用此功能。

在本快速教程中,我们将了解如何在运行Spring Boot应用程序时避免记录日志到控制台

无论我们使用的是Logback、Log4j2,还是Java Util Logging框架,我们都通过直截了当的示例演示如何实现这一点,以保持简单。

2. 如何禁用Logback的控制台输出

如果我们的项目使用Spring Boot Starters,那么spring-boot-starter-logging依赖项也将包含在内。

这个特定的启动器将Logback配置为默认框架,并且默认情况下最初只记录到控制台。

可以通过将logback-spring.xml文件添加到我们的resources目录来自定义此配置

例如,让我们设置XML以禁用控制台输出并仅记录到一个文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml"/>
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

此外,我们需要application.properties文件中的logging.file配置属性:

logging.file=tuyucheng-disabled-console.log

注意:这里实际上禁用控制台输出的原因是我们没有在XML文件中包含console-appender.xml,因此一个空的<configuration>标签也可以达到目的。

或者,我们可以通过使用应用程序属性覆盖默认配置来避免创建XML文件

例如,我们可以潜在地使用logging.pattern.console属性:

logging.pattern.console=

此属性被转换为CONSOLE_LOG_PATTERN系统属性,然后由Spring默认控制台配置使用。

当然,这种方法并不像前一种方法那样干净和可靠。这不是该属性的预期目的,因此Logback在某些时候可能不支持此“hack”。

此外,我们可以通过将根记录器级别的值设置为OFF来禁用所有日志记录活动:

logging.level.root=OFF

3. 如何禁用Log4j2的控制台输出

正如我们所知,Log4j2支持XML、JSON、YAML或属性格式来配置其日志记录行为。

为了简单起见,这次我们只演示一个简单的log4j2.xml文件示例。

其他格式遵循相同的配置结构:


<Configuration status="INFO">
    <Appenders>
        <File name="MyFile" fileName="tuyucheng.log"
              immediateFlush="true" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>
</Configuration>

与Logback设置一样,框架避免记录到控制台的原因不是配置“本身”,而是Root Logger不包含对Console Appender的引用这一事实。

4. 如何为Java Util Logging禁用控制台日志记录

Java Util Logging(或简称“JUL”)可能不是当今Spring Boot应用程序最流行的日志记录解决方案。

无论如何,我们将分析如何摆脱控制台日志,以防框架存在于我们的项目中。

我们所要做的就是将以下值添加到resources文件夹中的默认logging.properties:

handlers=java.util.logging.FileHandler
java.util.logging.FileHandler.pattern=tuyucheng.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

并在我们的application.properties文件中包含logging.file属性,任何值都可以解决问题:

logging.file=true

5. 总结

通过这些简短的示例,无论我们使用什么日志记录框架,我们现在都可以轻松地禁用应用程序中的控制台日志。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章