log4j 2 добавление нескольких цветов в консоль appender

Привет, я только что скачал и настроил log4j-2. Я застрял на применении цветовых кодов к SlowConsole консольный приложение Мой консольный appender как ниже.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SlowConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
        </Console>
        <File name="File" fileName="C:\log\out.txt">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>
    <Loggers>
        <logger name="org.abc.ea.web" level="ALL" additivity="false">
            <!--Log4j for the WEB MODULE -->
            <appender-ref ref="SlowConsole"/>
        </logger>
        <logger name="org.abc.ea.ejb" level="ALL" additivity="false">
            <!--Log4j for the EJB MODULE -->
            <appender-ref ref="SlowConsole"/>
        </logger>
        <Root level="ERROR">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File" />
        </Root>
    </Loggers>
</Configuration>

У меня два вопроса,

  1. Я новичок в log4j, это правильный способ написать файл конфигурации XML?

  2. Как я могу добавить два цветовых кода для каждого уровня журнала?

    например: DEBUG= зеленый -> выведет светло-зеленый шрифт, но мне нужно, чтобы это было dim а также bold

8 ответов

Решение

Я думаю, что нашел решение. Я скачал log4j2-core-sources.jar и проследил источник. Вы можете написать это как ниже;

<Console name="SlowConsole" target="SYSTEM_OUT">
     <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}"/>
</Console>

Я думаю, что документация log4j2 и ее примеры могут нуждаться в обновлении.

Для цветного вывода log4j2, который выглядит очень близко к выводу консоли обратного входа Spring Boot по умолчанию:

    <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
        <PatternLayout pattern="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=blue} %style{${sys:PID}}{magenta} [%15.15t] %style{%-40.40C{1.}}{cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    </Console>

Скриншот консоли

При использовании консоли eclipse приятно видеть ошибки красным, а все остальные журналы - черным. Вы можете сделать это с помощью фильтров:

<Appenders>
    <Console name="ConsoleStdOut" target="SYSTEM_OUT">
        <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
        <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
    <Console name="ConsoleStdErr" target="SYSTEM_ERR">
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="ConsoleStdOut" />
        <AppenderRef ref="ConsoleStdErr" />
    </Root>
</Loggers>

Стиль весенней загрузки:

<Properties>
  <Property name="LOG_PATTERN">
    %d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=green, TRACE=green} %style{${sys:PID}}{magenta} --- [%15.15t] %style{%-40.40c{1.}}{cyan} : %m%n%ex
  </Property>
</Properties>

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="${LOG_PATTERN}"/>
  </Console>
</Appenders>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout
                    pattern="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Это работало в моем приложении Spring Boot.

Но я не уверен, что он будет работать без Spring Boot.

Если кто-то хочет добиться того же с файлом log4j2.properties. Работает для log4j2 2.17.1 и выше.

      status = warn

# Name of the configuration
name = ConsoleAndRollingLogFileAppenderConfigDemo

# Console appender configuration
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.disableAnsi=false
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=green, TRACE=green} %style{%pid}{magenta} --- [%15.15t] %style{%-40.40c{1.}}{cyan} : %m%n%ex

# Log files location
property.basePath = src/main/resources

# RollingFileAppender name, pattern, path and rollover policy
appender.rolling.type = RollingFile
appender.rolling.name = fileLogger
appender.rolling.fileName= ${basePath}/app.log
appender.rolling.filePattern= ${basePath}/app_%d{yyyyMMdd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=green, TRACE=green} %style{%pid}{magenta} --- [%15.15t] %style{%-40.40c{1.}}{cyan} : %m%n%ex
appender.rolling.policies.type = Policies

# RollingFileAppender rotation policy
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 100MB
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 30
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.delete.type = Delete
appender.rolling.strategy.delete.basePath = ${basePath}
appender.rolling.strategy.delete.maxDepth = 10
appender.rolling.strategy.delete.ifLastModified.type = IfLastModified

# Delete all files older than 30 days
appender.rolling.strategy.delete.ifLastModified.age = 60d

# Root logger level
rootLogger.level = debug

# Configure root logger
rootLogger.appenderRef.stdout.ref = consoleLogger
rootLogger.appenderRef.rolling.ref = fileLogger

1: да это нормально! и вы можете добавить некоторые другие варианты. см. http://logging.apache.org/log4j/2.x/manual/configuration.html

2: вы можете использовать HTMLLayout для вашего файлового приложения.

см. http://logging.apache.org/log4j/2.x/manual/layouts.html

и http://www.tutorialspoint.com/log4j/log4j_htmllayout.htm

В log4j2 2.18.0 были добавлены значительные улучшения в подсветку и сгенерированный код ANSI:

  • Добавлена ​​поддержка 4-битного цвета. До 2.18.0 можно было использоватьWARN=bright blueно сгенерированный код ANSI в любом случае использовал только 3-битную цветовую палитру и устанавливал вес шрифта какbold. Теперь можно использовать все 16 цветов и к тому же менять толщину шрифта. Для этого необходимо использоватьbright_префикс. НапримерWARN=bright_blueили с весом шрифтаWARN=bright_blue bold. Подробности смотрите в этом выпуске

  • добавлена ​​поддержка истинного цвета. Например,WARN=#00ff00. При этом можно изменить как основной, так и фоновый цвет. Подробнее см. в этом выпуске . Например:

            %highlight{%d [%t] %-5level: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=bg_#5792e6 fg_#eef26b bold, INFO=black, DEBUG=#3fe0a8, TRACE=blue}
    
Другие вопросы по тегам