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

ccl*_*eve 8 logback slf4j

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

当我使用旧的Jetty NCSARequestLog对象时,有一种setIgnorePaths()方法可以工作,但是logback RequestLogImpl没有类似的方法.

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

pal*_*int 7

这是一个简单的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>
    ...
Run Code Online (Sandbox Code Playgroud)

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

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

<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>2.5.16</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

更多 EvaluatorFilter 文档


sto*_*ito 6

ch.qos.logback.access.net.URLEvaluator可以使用logback-access 代替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>
   ...
Run Code Online (Sandbox Code Playgroud)

内部URLEvaluator品牌contains()所以匹配可以发生在URL的任何部分。

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