如何在Logback中过滤堆栈跟踪帧

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

假设我有两个Java类:foo.ClassAbar.ClassB。要打印(root)异常堆栈跟踪,我需要只打印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>
java logging logback
3个回答
6
投票

我联系了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 +等)中使用它。所以我用以下命令配置了logback,不打印来自org.something包的任何堆栈跟踪线(例如org.apacheorg.springframeworkorg.hibernate等):

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder>
      <pattern>[%thread] %-5level - %msg%n%rEx{full, org}</pattern>
    </encoder>
  </appender>
  ...
</configuration>

谢谢Tomasz!


1
投票

这可能有助于像我这样编写Spring启动应用程序的人

我目前正在使用

<?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"/>


0
投票

我编写了自己的功能,可以过滤自2010年以来我使用的堆栈跟踪,我对此非常满意。我发布了自己的名为MgntUtils的开源Java库,它具有stackfiltering功能和一些其他有用的(IMHO)功能。这里是maven central MgntUtils的链接,如果你想要一个源代码,这里是github的链接:MgntUtils at github这里也是描述该库的文章的链接:MgntUtils Open Source Java library with stack trace filtering, Silent String parsing, Unicode converter and Version comparison。请参阅“Stacktrace噪声滤波器”一节

© www.soinside.com 2019 - 2024. All rights reserved.