【发布时间】:2019-11-25 07:11:42
【问题描述】:
我尝试使用 Windows 10 命令行 在控制台上打印彩色消息,但没有成功。根据 Log4j 2 documentation,我应该将 Jansi jar 添加到我的打印应用程序并将属性 log4j.skipJansi 设置为 false 以在 Windows 上启用 ANSI 支持。请您检查并说出我做错了什么:
- 以下代码是我目前的工作:
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!");
}
}
- 以下代码为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>
- \lib 目录的内容:
log4j-core-2.12.1.jar
log4j-api-2.12.1.jar
jansi-1.18.jar
- Windows compileAndRun.bat 文件:
@echo off
javac -cp lib\*;. LoggerTest.java
java -cp lib\*;. LoggerTest
pause
exit
但是,命令行中的输出仍然没有着色。这是我看到的:
因此,消息包含 ANSI 转义码,但它们不会被命令行解释。但是,如果我尝试复制/粘贴此输出并使用另一个 bat 文件直接回显它,那么我会看到彩色消息。
【问题讨论】:
-
我得到的正是这种行为。你最后找到解决办法了吗?
-
调试
ConsoleAppender并发现 jansi 的本机库加载失败(在我的情况下,java.io.tmpdir被相对路径覆盖,这弄乱了 JNI 加载器) - 修复它使颜色恢复
标签: java windows console log4j ansi