如何在logback-access中禁止记录某些请求?

时间:2011-09-14 17:03:55

标签: slf4j logback

我正在使用Jetty的logback-access。除了对图像的http请求(*.jpg*.gif)进行记录之外,它工作正常。大多数应用服务器会抑制这些日志记录,因为它们会使日志膨胀。

当我使用旧的Jetty NCSARequestLog对象时,有一个setIgnorePaths()方法有效,但是logback RequestLogImpl没有类似的方法。

我很确定在logback-access.xml中有一种方法可以使用某种过滤器。有没有人有合适的语法?

2 个答案:

答案 0 :(得分:5)

logback-access具有ch.qos.logback.access.net.URLEvaluator,可代替Janino使用内联脚本:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator class="ch.qos.logback.access.net.URLEvaluator">
            <URL>.jpg</URL>
            <URL>.gif</URL>
            <URL>https://example.com/static/</URL>
            <URL>/ops/</URL>
            <URL>/management/</URL>
            <URL>/monitoring</URL>
        </evaluator>
        <OnMismatch>NEUTRAL</OnMismatch>
        <OnMatch>DENY</OnMatch>
    </filter>
   ...

URLEvaluator内,contains()使得匹配可以发生在url的任何部分。

恕我直言,最好避免使用Janino库

答案 1 :(得分:3)

这是一个简单的EvaluatorFilter配置,在你的appender中复制:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <expression>
            return formattedMessage.contains(".jpg") ||
                formattedMessage.contains(".gif"); 
            </expression>
        </evaluator>
        <onMatch>DENY</onMatch>
    </filter>
    ...

也许您应该自定义表达式,因为.gif.jpg也可能出现在其他日志消息中。

EvaluatorFilter需要以下依赖项。如果您不使用Maven,请将其放到pom.xml或添加到类路径中:

<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>2.5.16</version>
</dependency>

Further EvaluatorFilter documentation