在我的示例中,我有以下代码:
package com.example.somepackage;
public class Example {
public static void main(String[] args) {
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Example.class);
logger.info("Example message.");
}
}
我希望它像这个最小的例子一样输出到控制台:
com.example.somepackage.Example.main Example message.
我唯一需要的是:
logback.xml
文件中的模式或 如果使用额外的代码而不是 XML 配置模式,还请提供有关如何将这两者配对的信息,以便除了打印出方法名称之外,仍然可以使用时间、日志级别等模式。
这是一个记录方法名称和行号的示例附加程序:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %green([%thread]) %highlight(%-5level) (%logger{50}.%M\(%line\)) - (%msg%n)
</pattern>
</encoder>
</appender>
对于任何寻找更新解决方案的人,我编写了一个 maven-plugin 来解决这个问题,同时也不会产生任何性能问题: https://github.com/PhilKes/slf4j-caller-info-maven-plugin
此插件在编译时将类名、方法名称和源代码行号注入到所有 SLF4J 日志语句中(请参阅配置)。 您需要做的就是将
callerInformation
MDC 参数添加到您的日志模式(请参阅代码示例)并将插件添加到您的 pom.xml
:
<plugin>
<groupId>io.github.philkes</groupId>
<artifactId>slf4j-caller-info-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<goals>
<goal>inject</goal>
</goals>
</execution>
</executions>
</plugin>