Печать intLevel в log4j2 - PullRequest
       42

Печать intLevel в log4j2

0 голосов
/ 29 июня 2018

Вы можете увидеть в https://logging.apache.org/log4j/2.x/manual/customloglevels.html числовые значения, соответствующие встроенным уровням ведения журнала log4j2, например, INFO-> 400. Как вы можете сослаться на это в patternlayout соотв. в конфигурации JDBC Logger?

У меня есть старая конфигурация log4j 1.x для JDBC, где она упоминалась как% iprio.

Обходной путь должен использовать

Уровень {ВЫКЛ = 0, ФАТАЛЬНАЯ = 100, ОШИБКА = 200, WARN = 300, INFO = 400, отлаживать = 500, трассировка = 600, ALL = 1000}

но я не очень рад этому.

1 Ответ

0 голосов
/ 30 июня 2018

Звучит так, как будто вы хотите записать целочисленное значение уровня журнала вместо имени и не хотите использовать функцию маркировки параметра PatternLayout s level.

Одним из возможных решений было бы создание custom Lookup, вот пример кода:

package example;

import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;

@Plugin(name = "level", category = "Lookup")
public class LevelLookup implements StrLookup{
    /**
     * Lookup the value for the key.
     * @param key  the key to be looked up, may be null
     * @return The value for the key.
     */
    public String lookup(String key) {
        return null;
    }


    /**
     * Lookup the value for the key using the data in the LogEvent.
     * @param event The current LogEvent.
     * @param key  the key to be looked up, may be null
     * @return The value associated with the key.
     */
    public String lookup(LogEvent event, String key) {
        return String.valueOf(event.getLevel().intLevel());
    }
}

Далее приведен пример конфигурации с использованием нового поиска - обратите внимание на ${level:}:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] ${level:} %logger{36} - %msg%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console" />           
        </Root>
    </Loggers>
</Configuration>

Вот пример кода, который выполняет некоторую регистрацию:

package example;

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

public class SomeClass {

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

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

и, наконец, вот вывод:

22:49:29.438 [main] 500 example.SomeClass - This is some debug!
22:49:29.440 [main] 400 example.SomeClass - Here's some info!
22:49:29.440 [main] 200 example.SomeClass - Some erorr happened!

Надеюсь, это поможет!

...