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>
У меня два вопроса,
Я новичок в log4j, это правильный способ написать файл конфигурации XML?
Как я могу добавить два цветовых кода для каждого уровня журнала?
например: 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 для вашего файлового приложения.
В 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}