【问题标题】:log4j 2 adding multiple colors to console appenderlog4j 2 向控制台附加程序添加多种颜色
【发布时间】:2014-02-24 05:38:20
【问题描述】:

您好,我刚刚下载并配置了 log4j-2。我坚持将颜色代码应用于SlowConsole 控制台附加程序。我的控制台附加程序如下所示。

<?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=green -> 将输出浅绿色字体,但我需要它是dimbold

【问题讨论】:

  • 如果您能为文档提供补丁,那就太好了!总是感谢您的帮助!

标签: java xml jakarta-ee log4j2


【解决方案1】:

我想我找到了解决方案。我下载了 log4j2-core-sources.jar 并追踪了source。你可以这样写;

<Console name="SlowConsole" target="SYSTEM_OUT">
     <PatternLayout disableAnsi="false"  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 documentation 及其示例可能需要更新。

【讨论】:

  • 找到手册logging.apache.org/log4j/2.x/manual/layouts.html搜索highlight{pattern}{style}
  • @HarmeetSingh 是的,这个答案现在有点老了。
  • 我也不得不做 disableAnsi="false"
  • 只是添加到@KalpeshSoni 答案。 disableAnsi="false" 进入&lt;PatternLayout/&gt; 旁边的pattern=""
  • 添加了 disableAnsi="false"
【解决方案2】:

对于看起来非常接近 Spring Boot 的默认 logback 控制台输出的 log4j2 彩色输出:

    <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>

【讨论】:

  • 应用自定义日志配置后正是我想要的!
  • 我得到无法识别的转换说明符 [wEx] 从转换模式中的第 209 位开始。有人知道发生了什么吗?
  • 是的,它看起来像原始的 Logback Spring 记录器。正是我要找的。但是如果没有 PatternLayout 标签中的 disableAnsi="false" 属性,它就不起作用。谢谢!
  • @ycomp 我修改了模式,你提到的问题也解决了...试试下面的模式:&lt;PatternLayout disableAnsi="false" 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{}{magenta} [%M] %style{%40C}{cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%xEx}" /&gt;
【解决方案3】:

使用 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>

【讨论】:

    【解决方案4】:

    Spring Boot 风格:

    <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>
    

    【讨论】:

      【解决方案5】:
      <?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 的情况下工作。

      【讨论】:

        【解决方案6】:

        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

        【讨论】:

        • 谢谢@Homayoun!我的第二个问题还没有解决。我正在使用控制台Appender。我希望在 netbeans、eclipse 或任何 STD_OUT 上查看我的日志。所以 HTMLLayout 不会工作,不是吗?
        • 这取决于你的标准输出查看器......例如,eclipse标准输出(输出)对粗体没有任何意义。
        猜你喜欢
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多