Log4j 2:如何在 Windows 控制台上启用 ANSI 颜色?

esc*_*380 6 java windows console log4j ansi-escape

我尝试使用Windows 10 命令行在控制台上打印彩色消息,但没有成功。根据Log4j 2 文档,我应该将Jansi jar 添加到我的打印应用程序中,并将属性设置log4j.skipJansifalse在 Windows 上启用 ANSI 支持。请您检查并说出我做错了什么:

  1. 以下代码是我当前的工作:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LoggerTest {
    private static final Logger logger = LogManager.getLogger();

    public static void main(String[] args) throws Exception {
        logger.info("Hello!");
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 以下代码是Log4j 2配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <Properties>
        <Property name="log4j.skipJansi" value="false"/>
    </Properties>

    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout>
                <disableAnsi>false</disableAnsi>
                <Pattern>%style{%d [%t] %c %p: %m}{yellow}%n%ex</Pattern>
            </PatternLayout>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
    </Loggers>

</Configuration>
Run Code Online (Sandbox Code Playgroud)
  1. \lib目录的内容:
log4j-core-2.12.1.jar
log4j-api-2.12.1.jar
jansi-1.18.jar
Run Code Online (Sandbox Code Playgroud)
  1. 以及 WindowscompileAndRun.bat 文件:
@echo off
javac -cp lib\*;. LoggerTest.java
java -cp lib\*;. LoggerTest
pause 
exit 
Run Code Online (Sandbox Code Playgroud)

然而,命令行中的输出仍然没有着色。这是我所看到的:

在此输入图像描述

因此,该消息包含 ANSI 转义码,但命令行不解释它们。不过,如果我尝试复制/粘贴此输出并使用另一个 bat 文件直接回显它,那么我会看到彩色消息。

小智 8

disableAnsi="false"当我添加适当的内容时它起作用了 <PatternLayout>

 <Appenders>
    <Console name="ConsoleAppender" target="SYSTEM_OUT">
        <PatternLayout
            pattern="%highlight{%p} %logger{-2} - %m{FATAL=red blink,ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold}%n" disableAnsi="false"/>
        </Console>
    </Appenders> 
Run Code Online (Sandbox Code Playgroud)