Logback - распечатать имя метода, вызвавшего метод log

В моем примере у меня есть следующий код:

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 используется дополнительный код, пожалуйста, также предоставьте информацию о том, как соединить эти два, чтобы можно было использовать шаблоны для времени, уровня журнала и т. Д. В дополнение к распечатанному имени метода.

3 ответа

Решение

Я думаю, что вы ищете %M шаблон. Посмотрите документы Logback для всех шаблонов, которые вы можете использовать. Обратите внимание, однако, что эти документы также говорят:

Генерация имени метода не особенно быстра. Таким образом, его использование следует избегать, если скорость выполнения не является проблемой.

Это пример приложения, которое регистрирует имя метода и номер строки:

       <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, решающий эту проблему, но при этом не вызывающий никаких проблем с производительностью:https://github.com/PhilKes/slf4j-caller-info-maven-plugin

Этот плагин вводит имя класса, а также, при необходимости, имя метода и номер строки исходного кода во все операторы журнала SLF4J во время компиляции (см. Конфигурацию ). Все, что вам нужно сделать, это добавитьcallerInformationMDC в свой шаблон журнала (см. Пример кода ) и добавьте плагин в свой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>
Другие вопросы по тегам