Logback - 打印出调用log方法的方法名称

问题描述 投票:0回答:3

在我的示例中,我有以下代码:

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 配置模式,还请提供有关如何将这两者配对的信息,以便除了打印出方法名称之外,仍然可以使用时间、日志级别等模式。

java logging slf4j logback
3个回答
38
投票

我认为您正在寻找

%M
模式。 请参阅Logback 文档 对于您可以使用的所有模式。 但请注意,这些文档还说:

生成方法名称并不是特别快。因此,除非执行速度不是问题,否则应避免使用它。


2
投票

这是一个记录方法名称和行号的示例附加程序:

 <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>

0
投票

对于任何寻找更新解决方案的人,我编写了一个 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>
© www.soinside.com 2019 - 2024. All rights reserved.