如何在 Logback 中过滤堆栈跟踪帧
How to filter stacktrace frames in Logback
假设我有两个 Java 类:foo.ClassA
和 bar.ClassB
。要打印(根)异常堆栈跟踪,我只需要打印 foo
包的帧。我的问题是我如何配置 Logback 来做到这一点。
我知道该功能已经在 Logback 中实现,我需要使用 evaluator
。但我想不通。我尝试了描述的示例 here 但没有成功(不足为奇)。
谁能给出过滤堆栈跟踪帧的确切配置?
<configuration>
<evaluator name="FILTER">
<expression>¿what should I put here?</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, FILTER}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
我联系了 Tomasz Nurkiewicz(问题中链接的博客的作者),他友好地回答了我的问题。我发布了答案,以防万一:
在打印堆栈跟踪时,要从 bar
包中过滤行,请使用以下命令:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, bar}</pattern>
</encoder>
</appender>
...
</configuration>
我想在我的 Web 应用程序中使用它 (Tomcat+Spring+Hibernate+etc)。所以我使用以下配置 logback 不打印来自 org.something
包的任何堆栈跟踪行(例如 org.apache
、org.springframework
、org.hibernate
等):
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, org}</pattern>
</encoder>
</appender>
...
</configuration>
谢谢托马斯!
我编写了自己的功能来过滤自 2010 年以来使用的堆栈跟踪,我对此非常满意。我发布了自己的名为 MgntUtils 的开源 Java 库,它具有堆栈过滤功能和一些其他有用的(恕我直言)功能。这是 link 到 maven central MgntUtils and here is a link to github if you want a source code: MgntUtils at github also here is the link to the article that describes the library: MgntUtils Open Source Java library with stack trace filtering, Silent String parsing, Unicode converter and Version comparison。请参阅段落 "Stacktrace noise filter"
这可能会对像我这样正在编写 springboot 应用程序的人有所帮助
我目前正在使用
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" packagingData="true">
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProfile name="!cloud">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${APP_NAME} %green(%d{dd-MM-yyyy HH:mm:ss.SSS}) %magenta([%thread]) %highlight(%-5level) %red(%logger.%M:%L) - %magenta(%msg) %rEx{full,java.lang.reflect.Method,
org.apache.catalina,
org.apache.tomcat,
org.apache.coyote,
javax,
java.util.concurrent,
java.lang.Thread,
org.springframework.aop,
org.springframework.boot.actuate,
org.springframework.security,
org.springframework.transaction,
org.springframework.web,
sun.reflect,
net.sf.cglib,
ByCGLIB
}%n
</pattern>
</encoder>
</appender>
</springProfile>
<springProfile name="cloud">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- send cloud event in one line so kibana can log it as one event -->
<pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger.%M:%L - %msg %replace(%rEx){'[\r\n]+', '\n'}%nopex %n</pattern>
</encoder>
</appender>
</springProfile>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.aaa" level="DEBUG"/>
<logger name="org.springframework.web.filter" level="INFO"/>
<logger name="org.springframework.cloud" level="INFO"/>
<logger name="org.springframework.core.env" level="INFO"/>
<logger name="org.springframework.boot" level="INFO"/>
<logger name="org.springframework.boot.actuate" level="WARN"/>
<logger name="org.springframework.boot.context" level="INFO"/>
<logger name="org.springframework.boot.autoconfigure" level="INFO"/>
<logger name="io.lettuce.core.protocol" level="WARN"/>
假设我有两个 Java 类:foo.ClassA
和 bar.ClassB
。要打印(根)异常堆栈跟踪,我只需要打印 foo
包的帧。我的问题是我如何配置 Logback 来做到这一点。
我知道该功能已经在 Logback 中实现,我需要使用 evaluator
。但我想不通。我尝试了描述的示例 here 但没有成功(不足为奇)。
谁能给出过滤堆栈跟踪帧的确切配置?
<configuration>
<evaluator name="FILTER">
<expression>¿what should I put here?</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, FILTER}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
我联系了 Tomasz Nurkiewicz(问题中链接的博客的作者),他友好地回答了我的问题。我发布了答案,以防万一:
在打印堆栈跟踪时,要从 bar
包中过滤行,请使用以下命令:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, bar}</pattern>
</encoder>
</appender>
...
</configuration>
我想在我的 Web 应用程序中使用它 (Tomcat+Spring+Hibernate+etc)。所以我使用以下配置 logback 不打印来自 org.something
包的任何堆栈跟踪行(例如 org.apache
、org.springframework
、org.hibernate
等):
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %-5level - %msg%n%rEx{full, org}</pattern>
</encoder>
</appender>
...
</configuration>
谢谢托马斯!
我编写了自己的功能来过滤自 2010 年以来使用的堆栈跟踪,我对此非常满意。我发布了自己的名为 MgntUtils 的开源 Java 库,它具有堆栈过滤功能和一些其他有用的(恕我直言)功能。这是 link 到 maven central MgntUtils and here is a link to github if you want a source code: MgntUtils at github also here is the link to the article that describes the library: MgntUtils Open Source Java library with stack trace filtering, Silent String parsing, Unicode converter and Version comparison。请参阅段落 "Stacktrace noise filter"
这可能会对像我这样正在编写 springboot 应用程序的人有所帮助
我目前正在使用
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" packagingData="true">
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProfile name="!cloud">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${APP_NAME} %green(%d{dd-MM-yyyy HH:mm:ss.SSS}) %magenta([%thread]) %highlight(%-5level) %red(%logger.%M:%L) - %magenta(%msg) %rEx{full,java.lang.reflect.Method,
org.apache.catalina,
org.apache.tomcat,
org.apache.coyote,
javax,
java.util.concurrent,
java.lang.Thread,
org.springframework.aop,
org.springframework.boot.actuate,
org.springframework.security,
org.springframework.transaction,
org.springframework.web,
sun.reflect,
net.sf.cglib,
ByCGLIB
}%n
</pattern>
</encoder>
</appender>
</springProfile>
<springProfile name="cloud">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- send cloud event in one line so kibana can log it as one event -->
<pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger.%M:%L - %msg %replace(%rEx){'[\r\n]+', '\n'}%nopex %n</pattern>
</encoder>
</appender>
</springProfile>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.aaa" level="DEBUG"/>
<logger name="org.springframework.web.filter" level="INFO"/>
<logger name="org.springframework.cloud" level="INFO"/>
<logger name="org.springframework.core.env" level="INFO"/>
<logger name="org.springframework.boot" level="INFO"/>
<logger name="org.springframework.boot.actuate" level="WARN"/>
<logger name="org.springframework.boot.context" level="INFO"/>
<logger name="org.springframework.boot.autoconfigure" level="INFO"/>
<logger name="io.lettuce.core.protocol" level="WARN"/>