java - 彩色日志输出,不解析 log4j.properties 中的 '%highlight{...}{..}'

标签 java gradle log4j slf4j log4j2

我正在尝试使用 Log4j 和 log4j.properties 文件配置日志输出,但在根据日志级别设置彩色输出时遇到问题。

日志记录实用程序似乎根本不解析 %highlight ... 转换命令。

我可以看出我的配置处于正确的轨道上,因为模式的其他部分工作正常。

我当前的代码基于此 S/O 答案:log4j 2 adding multiple colors to console appender

我假设这是我没有看到的简单事情,因为我对此相当陌生。不幸的是,该文档很难拼凑在一起,或者是用于基于 xml 的配置。

感谢您提前提供的任何帮助。

我已经浏览过一些资源:

以下是相关文件/代码:

log4j.properties:

log4j.rootLogger=TRACE, STDOUT
log4j.logger.deng=INFO
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%highlight{%d %-5p [%t] (%F:%L) - %m%n}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}

Gradle 依赖项:

dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.+'
    compile 'org.slf4j:slf4j-log4j12:1.7.+'
    testCompile 'junit:junit:4.12'
}

测试日志记录:

@Test
public void testLogger(){
    LOGGER.info("Info level log");
    LOGGER.debug("Debug level log");
    LOGGER.warn("Warn level log");
    LOGGER.error("Error level log");
    LOGGER.trace("Trace level log");
}

输出:

log4j:ERROR Unexpected char [h] at position 2 in conversion patterrn.
%highlight{2017-07-08 13:18:21,243 INFO  [main] (LongLinkedListTest.java:40) - Info level log
}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}%highlight{2017-07-08 13:18:21,246 DEBUG [main] (LongLinkedListTest.java:41) - Debug level log
}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}%highlight{2017-07-08 13:18:21,246 WARN  [main] (LongLinkedListTest.java:42) - Warn level log
}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}%highlight{2017-07-08 13:18:21,246 ERROR [main] (LongLinkedListTest.java:43) - Error level log
}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}%highlight{2017-07-08 13:18:21,246 TRACE [main] (LongLinkedListTest.java:44) - Trace level log
}{FATAL=red, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}
Process finished with exit code 0

最终结果:

为了后代,我最终得到了以下结果:

Gradle 依赖项:

dependencies {
    //logging dependencies
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.+'
    compile 'org.apache.logging.log4j:log4j-api:2.+'
    compile 'org.apache.logging.log4j:log4j-core:2.+'
    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2+'
    compile 'com.fasterxml.jackson.core:jackson-databind:2+'

    ...
}

更新依赖项后,我就能够转移到基于 yaml 的配置,并且使用 %highlight 表示法就像一个魅力!

如果有人想查看最终配置,可以在这里找到:https://github.com/Epic-Breakfast-Productions/OWAT/blob/master/implementations/java/src/main/resources/log4j2.yaml

最佳答案

您是否有可能将 Log4j2 与 log4j 1.x 混淆了? log4j:ERROR 错误是旧版 log4j 1.2 错误消息。

请仅使用 Log4j2 依赖项并使用 Log4j2 配置来简化问题。默认情况下,配置文件名为 log4j2.xml。

请删除 org.slf4j:slf4j-log4j12:1.7.+ 依赖项,改用 log4j-api-2.x、log4j-core-2.x 和 log4j-slf4j-impl- 2.x。

有用的链接:

  1. Which jars
  2. Console appender
  3. PatternLayout带有颜色和突出显示
  4. Configuration

Log4j 1.2 became End of Life 2015年夏天。让我们升级吧! :-)

关于java - 彩色日志输出,不解析 log4j.properties 中的 '%highlight{...}{..}',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988924/

相关文章:

java - appengine-api-1.0-sdk-1.7.6.jar 不是目录

java - EasyMock 缺少行为,即使它已定义

java - SONAR 实现是否将伴随类视为公共(public)类的一部分 - 指标

java - 在 gwtSuperDev 任务中包含用于重新编译的其他源

更改 build.gradle 时出现 java.lang.ClassNotFoundException : javax. persistence.EntityManagerFactory

gradle - 更新到Java 1.9后缺少库

java - 每次运行我的程序时创建一个新的日志文件

java - 使用 java/Java EE 的浏览器检测

android - Log4jshell 会使我的 android 应用程序易受攻击吗?如果是这样,我该如何保护我的应用程序

java - 如何使用 Log4J 在 Java 中创建二进制日志文件