Как подавить регистрацию некоторых запросов в logback-доступе? - PullRequest
7 голосов
/ 14 сентября 2011

Я использую logback-доступ с Jetty.Работает нормально, за исключением того, что http запросы на изображения (*.jpg, *.gif) регистрируются.Большинство серверов приложений подавляют эти записи журнала, потому что они раздувают журналы.

Когда я использовал старый объект Jetty NCSARequestLog, был метод setIgnorePaths(), который работал, но logback RequestLogImpl неесть похожий метод.

Я почти уверен, что есть способ сделать это в logback-access.xml, возможно, с помощью какого-то фильтра.У кого-нибудь есть соответствующий синтаксис?

Ответы [ 2 ]

5 голосов
/ 12 июля 2018

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

3 голосов
/ 17 сентября 2011

Вот простая 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 нуждается в следующей зависимости. Поместите его в pom.xml или добавьте в свой путь к классам, если вы не используете Maven:

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

Дополнительная документация по EvaluatorFilter

...