Java / Slf4J: Пользовательская регистрация для одного класса? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть приложение Spring Boot с application.yml, как показано ниже:

logging:
       level:
             com.mycompany.TestClass: OFF

С этим я могу контролировать, выводит ли класс какие-либо журналы или нет. Что я хотел бы сделать, так это то, что для этого конкретного класса отформатируйте сообщения об исключениях без трассировки стека (не затрагивая журналы не исключений). Например, если метод some класса выдает исключение, и я регистрирую исключение следующим образом:

try {
  //throw index of bounds exception
} catch(Exception e){
  log.error("Error occurred: " + e)
}

Я хочу только часть ниже (без трассировки стека):

Error occurred: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

Это вообще возможно?

EDIT Я пытаюсь настроить регистрацию файла JAR - у меня нет доступа для изменения кода ...

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вы должны использовать глубину исключения в logback.xml, если вы используете.Существует функция в logback вместе с slf4j, где вы можете указать длину трассировки стека исключений.Ниже приведен фрагмент кода.

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- %rEx... prints exception causes in REVERSE order: http://nurkiewicz.blogspot.com/2011/09/logging-exceptions-root-cause-first.html -->
            <pattern>
                <![CDATA[%-19(%date{HH:mm:ss.SSS} [%.8thread]) %-5level   %-128(%-32(%replace(%logger{1}){'^org\.wrml.*\.',''}) - %msg) %n%rEx]]></pattern>
        </encoder>
    </appender>

Вы должны использовать правильную компоновку.

Для получения более подробной информации см. Ссылки ниже.

https://www.nurkiewicz.com/2011/09/logging-exceptions-root-cause-first.html

https://logback.qos.ch/manual/layouts.html#rootException

Если вы хотите настроить с application.yml, вы можете обратиться по ссылке ниже.

https://springframework.guru/using-yaml-in-spring-boot-to-configure-logback/

0 голосов
/ 16 мая 2019

Вы можете попытаться использовать e.getMessage() вместо передачи только переменной e. Итак, ваш код будет выглядеть так:

try {
  //throw index of bounds exception
} catch(Exception e){
  log.error("Error occurred: " + e.getMessage());
}
...