Шаблон RegexFilter Log4j2 не совпадает - PullRequest
0 голосов
/ 20 мая 2018

В моем журнале есть следующие строки, которые я хочу исключить, поэтому я хотел использовать для этого regexfilter:

[INFO] 2018-05-20 14: 52: 15.993 [qtp22844606-20] TimingFilter - время запроса: 16 мс

[INFO] 2018-05-20 14: 52: 18,998 [qtp22844606-17] TimingFilter - время запроса: 15 мс

[INFO] 2018-05-20 14: 52: 22.001 [qtp22844606-20] TimingFilter - время запроса: 0 мс

[INFO] 2018-05-20 14: 52: 24.992 [qtp22844606-17] TimingFilter - запросвремя: 0 мс

Моя конфигурация выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders> 
        <Console name="console" target="SYSTEM_OUT">
            <RegexFilter regex=".*TimingFilter.*" useRawMsg="true" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout   pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info" additivity="false">
            <appender-ref ref="console" />
        </Root>
    </Loggers>
</Configuration>

При переключении «ПРИНЯТЬ» и «ОТКАЗ» сообщение не поступает, поэтому RegexFilter сам по себе, похоже, срабатывает.Я также безуспешно пытался "\ bTimingFilter \ b", ". * \ BTimingFilter \ b. *".

Я использую Log4J 2.11.

Можете ли вы дать какие-либо советы, что я делаюнеправильно?Я проверил все остальные вопросы, связанные с RegexFilter, здесь, а также на других сайтах (вот где я получил предложения по шаблонам Regex, которые я пробовал), но, похоже, ничего не работает.Я также проверил шаблоны на https://regex101.com/ в своем журнале, и там они правильно совпали.

1 Ответ

0 голосов
/ 21 мая 2018

Это происходит потому, что у вас есть useRawMsg="true", переключите его на useRawMsg = "false".См. Руководство log4j2 :

Если установлено значение true, будет использоваться неотформатированное сообщение, в противном случае будет использоваться форматированное сообщение.Значение по умолчанию неверно.

РЕДАКТИРОВАТЬ:

Я недостаточно внимательно посмотрел на вашу конфигурацию и ваш вывод, поэтому я извиняюсь за это.Причина, по которой RegexFilter не работает для вас, заключается в том, что вы используете его для попытки фильтрации по имени регистратора .Согласно инструкции log4j2 :

RegexFilter позволяет сравнивать форматированное или неформатированное сообщение с регулярным выражением.

Чтобы запретить регистратору регистрировать любые сообщения, у вас есть несколько вариантов.Я проиллюстрирую один из них приведенным ниже примером кода.

Вот основной класс, который запускает класс TimingFilter:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {

private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        log.info("Here's some info!");
        log.error("Some erorr happened!");
        TimingFilter.main(null);
    }

}

Вот класс TimingFilter:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TimingFilter {

    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        log.info("Here's some info!");
        log.error("Some erorr happened!");
    }
}

Вот пример файла log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders> 
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout   pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger level="off" name="example.TimingFilter">
        </Logger>
        <Root level="info" additivity="false">
            <appender-ref ref="console" />
        </Root>
    </Loggers>
</Configuration>

Обратите внимание, как я настроил регистратор example.TimingFilter так, чтобы его уровень был "выключен".Это предотвращает любую регистрацию от этого регистратора.

Когда я запускаю класс Main, вывод содержит только сообщения от Main:

[INFO ] 2018-05-22 23:23:30.473 [main] Main - Here's some info!
[ERROR] 2018-05-22 23:23:30.474 [main] Main - Some erorr happened!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...