首页 > 解决方案 > 无法在控制台上获取调试日志

问题描述

我的 Spring Boot 应用程序中的 log4j2.xml 文件有以下配置,配置适用于信息、错误、警告,但我无法在控制台上获取 Debug 日志,您能否建议我应该在哪里执行更改以获取控制台上打印的调试日志。

<?xml version="1.0" encoding="UTF-8"?>

<Configuration monitorInterval="60">
    <Properties>
        <Property name="FUNCTION">project-name</Property>
    </Properties>


    <Appenders>
        <Console name="consoleOut" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{ISO8601} %-5p  %-30c{1} [%-10t] %m%n" />
            <Filters>
                <ThresholdFilter level="FATAL" onMatch="DENY"
                    onMismatch="ACCEPT" />
                <ThresholdFilter level="DEBUG" />
            </Filters>
        </Console>


        <Console name="consoleError" target="SYSTEM_ERR">
            <PatternLayout pattern="%d{ISO8601} %-5p  %-30c{1} [%-10t] %m%n" />
            <Filters>
                <ThresholdFilter level="FATAL" />
            </Filters>
        </Console>

        <RollingFile name="logFile" fileName="./log/${FUNCTION}.log"
            filePattern="./log/${FUNCTION}.log-%i">
            <PatternLayout>
                <Pattern>%d{ISO8601} %-5p %-30c{1} [%-10t] %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>
	
    <Loggers>
        <Logger name="com.myclass" level="DEBUG" />
        <Root level="INFO">
            <AppenderRef ref="logFile" />
            <AppenderRef ref="consoleOut" />
            <AppenderRef ref="consoleError" />
        </Root>
    </Loggers>

</Configuration>

我还将我的日志记录根级别更改为 DEBUG,但它也没有帮助。

标签: spring-bootlogginglog4j2

解决方案


让我们了解一下 Log4j 将如何处理调试事件,假设该事件正在使用名称以“com.myclass”开头的 Logger。

  1. 没有全局过滤器,因此事件会绕过它们。
  2. 该事件被分配给具有 DEBUG 级别的“com.myclass”LoggerConfig。任何带有 DEBUG、INFO、WARN、ERROR 或 FATAL 的事件都将继续。TRACE 事件将被拒绝。所以该事件将继续被评估。
  3. 记录器上没有过滤器,因此将继续评估事件。
  4. LoggerConfig 没有 Appender 引用,因此事件将渗透到根 LoggerConfig。
  5. Root LoggerConfig 有 3 个 AppenderRefs,没有过滤器,因此事件将被传递给它们中的每一个。
  6. logFile Appender 没有过滤器,因此将记录事件。
  7. consoleOut Appender 有两个过滤器。第一个将拒绝任何 FATAL 事件并接受其他所有事件,因此应将 DEBUG、INFO、WARN 和 ERROR 事件记录到控制台。DEBUG 过滤器将被忽略,因为所有内容都已被接受或拒绝。在这种情况下,调试事件将被记录到 system.out。
  8. 该事件被传递给 consoleError appender。它有一个使用默认匹配标准的过滤器,因此将继续评估 FATAL 事件并拒绝所有其他事件。因此调试事件不会被记录到 system.error 中。

所以根据上面你应该看到你的日志事件。这向我表明您仍在使用 Spring Boot 的默认日志记录配置,因为Spring Boot 的文档表明默认级别是 info。


推荐阅读