Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to suppress logging of some requests in logback-access?

Tags:

slf4j

logback

I'm using logback-access with Jetty. It's working fine, except that http requests for images (*.jpg, *.gif) are getting logged. Most app servers suppress these log records because they bloat the logs.

When I was using the old Jetty NCSARequestLog object, there was a setIgnorePaths() method that worked, but the logback RequestLogImpl doesn't have a similar method.

I'm pretty sure there's a way to do it in logback-access.xml, perhaps using some kind of filter. Does anyone have the appropriate syntax?

like image 376
ccleve Avatar asked Sep 14 '11 17:09

ccleve


2 Answers

logback-access has ch.qos.logback.access.net.URLEvaluator that can be used instead of inline scripts with 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>
   ...

Inside the URLEvaluator makes contains() so the matching can happens on any part of url.

IMHO it's better to avoid to use the Janino library

like image 81
Sergey Ponomarev Avatar answered Sep 28 '22 05:09

Sergey Ponomarev


Here is a simple EvaluatorFilter configuration, copy inside your 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>
    ...

Maybe you should customize the expression, since .gif and .jpg could occur in other log messages too.

EvaluatorFilter needs the following dependency. Put it to your pom.xml or add to your classpath if you don't use Maven:

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

Further EvaluatorFilter documentation

like image 33
palacsint Avatar answered Sep 28 '22 03:09

palacsint