Log4j2, включая имя библиотеки в stacktrace
Я только начал использовать log4j2.
Но я обнаружил, что log4j2, включая имя библиотеки в stacktrace.
Как я могу отключить это?
Вот пример:
java.lang.NullPointerException
at com.sev.controllers.UserController.login(UserController.java:35) ~[UserController.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.1.7.RELEASE.jar:4.1.7.RELEASE]
Я говорю об этом имени в скобках [].
Вот моя конфигурация log4j
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.log4j.xml" level="INFO"/>
<Logger name="org.hibernate" level="INFO"/>
<Logger name="org.springframework" level="INFO"/>
<Root level="debug">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
И вот мои версии:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.3</version>
</dependency>
Забудьте упомянуть, что мое приложение основано на spring -boot.
Ответы
Ответ 1
В шаблоне PatternLayout вашей конфигурации нет явного преобразователя исключений. Log4j предоставит значение по умолчанию, равное% xEx. Это включает файл jar и т.д.
Вы можете изменить это, явно указав настройку простого конвертера% ex. Таким образом, ваш шаблон заканчивается...% m% ex% n.
Ответ 2
Вам нужно установить alwaysWriteExceptions
в false в макете шаблона.
https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
Затем добавьте к вашему шаблону варианты, которые вы хотели бы использовать.
https://logging.apache.org/log4j/2.x/manual/layouts.html#Patterns
Выводит трассировку Throwable, связанную с LoggingEvent, по умолчанию это будет выводить полную трассировку, как обычно можно найти с вызовом Throwable.printStackTrace().
Вы можете следовать за переворачивающимся конверсионным словом с опцией в form% throwable {option}.
% throwable {short} выводит первую строку Throwable.
% throwable {short.className} выводит имя класса, в котором исключение.
% throwable {short.methodName} выводит имя метода, в котором исключение.
% throwable {short.fileName} выводит имя класса, в котором исключение.
% throwable {short.lineNumber} выводит номер строки, где исключение.
% throwable {short.message} выводит сообщение.
% throwable {short.localizedMessage} выводит локализованное сообщение.
% throwable {n} выводит первые n строк трассировки стека.
Задание% throwable {none} или% throwable {0} подавляет вывод исключение.
Если вы все еще не можете удовлетворить то, что хотите, с этими параметрами вам нужно будет написать собственный конвертер, как описано здесь.
https://logging.apache.org/log4j/2.x/manual/extending.html#PatternConverters
Пример, который немного более ясен, чем их.
@Plugin(name="HostNameConverter", category ="Converter")
@ConverterKeys({"h","host","hostName"})
public class HostNameConverter extends LogEventPatternConverter {
/**
* Constructs an instance of LoggingEventPatternConverter.
*
* @param name name of converter.
* @param style CSS style for output.
*/
protected HostNameConverter(String name, String style) {
super(name, style);
}
@Override
public void format(LogEvent event, StringBuilder toAppendTo) {
toAppendTo.append(HostNameUtil.getLocalHostName());
}
public static HostNameConverter newInstance(String[] options){
return new HostNameConverter(HostNameConverter.class.getSimpleName(),HostNameConverter.class.getSimpleName());
}
}
Ответ 3
Я думаю, что лучше: [...% m% n% ex]