logback.xml :仅覆盖一个类的根级别

Att*_*zki 9 java xml logback

鉴于 logback.xml 中的以下根:

<root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
</root>
Run Code Online (Sandbox Code Playgroud)

定义以下日志记录规则:

<logger name="com.myproject.mypackage.MyClass" level="DEBUG">
   <appender-ref ref="STDOUT" />
</logger>
Run Code Online (Sandbox Code Playgroud)

myclass 中的日志级别不会是 DEBUG,因为根级别是 info。但我只想查看这个特定类中的调试日志。这是否可以在不更改根级别的情况下实现(这会导致应用程序从各个地方吐出调试日志)?

编辑:我也试过这个:

<logger name="com.myproject" level="INFO"/>
<logger name="com.myproject.mypackage.MyClass" level="DEBUG">

<root level="DEBUG">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
</root>
Run Code Online (Sandbox Code Playgroud)

所以我们的想法是将根设置为调试,所以一切都是调试,但将“com.myproject”下的所有内容都设置为信息,因此日志级别确实是信息,但将 MyClass 设置为调试。它没有用:(

Kon*_*lin 8

“root”级别不限制其他记录器的级别,它只是设置默认值。所以<root level="INFO"><logger name="some.name" level="DEBUG">非常适合在一起,而且你不需要放松“根”级别。因此,这两个示例都应该登录名为 的记录器的调试级别com.myproject.mypackage.MyClass。因此,如果您的配置记录了某些内容并且没有从 记录com.myproject.mypackage.MyClass,则问题应该出在另一个地方。

此外,如果您希望某个记录器仅登录到它自己的 appender,就像在第一个示例中一样,您应该使用additivity="false"属性 on logger,否则它将同时登录到根 appender 和特定于 logger 的 appender。

例如:

import org.slf4j.LoggerFactory;

class Scratch {
    public static void main(String[] args) {
        LoggerFactory.getLogger("some.logger").info("info msg");
        LoggerFactory.getLogger("another.logger").info("info msg");
        LoggerFactory.getLogger("another.logger").error("error msg");
    }
}
Run Code Online (Sandbox Code Playgroud)

logback.xml:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>STDOUT: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>STDOUT2: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="some.logger" level="info" additivity="false">
        <appender-ref ref="STDOUT2" />
    </logger>

    <root level="error">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

结果:

STDOUT2: 16:58:58.973 [main] INFO  some.logger - info msg
STDOUT: 16:58:58.979 [main] ERROR another.logger - error msg
Run Code Online (Sandbox Code Playgroud)