以下配置

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %C{0}: %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>


和以下代码

package tests;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Runner {

    private static final Logger log = LoggerFactory.getLogger(Runner.class);



    public static void main(String[] args) {

        new Runner().new Parent().hello();
        new Runner().new Child().hello();
    }

    public class Parent {

        public void hello() {
            log.info("Hello from " + getClass().getSimpleName());
        }
    }

    public class Child extends Parent{

    }
}


输出

20:42:13.811 Runner$Parent: Hello from Parent
20:42:13.814 Runner$Parent: Hello from Child


这意味着%C{0}输出的内容与this.getClass().getSimpleName()不同。

是否可以使用logback模式输出与后者相同的输出?

最佳答案

在logback配置文件中,使用转换说明符:%class {0}输出类名。例:

<pattern>%d %-5level %class{0}: %msg%n</pattern>

否则,尝试使用%logger{0}来使用Logger简单名称,并为每个类使用所需的记录器。

10-07 13:50