我正在使用Jetty的logback-access.它工作正常,除了图像(*.jpg,*.gif)的http请求被记录.大多数应用服务器会抑制这些日志记录,因为它们会使日志膨胀
当我使用旧的Jetty NCSARequestLog对象时,有一种setIgnorePaths()方法可以工作,但是logback RequestLogImpl没有类似的方法.
我很确定有一种方法可以logback-access.xml使用,也许使用某种过滤器.有没有人有合适的语法?
这是一个简单的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)
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库