我尝试使用Windows 10命令行在控制台上打印彩色消息,但没有成功。根据Log4j 2文档,我应该将Jansijar添加到我的打印应用程序中,并将属性log4j.skipJansi
设置为false
,以便在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!");
}
}
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>
1.\lib目录的内容:
log4j-core-2.12.1.jar
log4j-api-2.12.1.jar
jansi-1.18.jar
1.以及Windows的compileAndRun.bat文件:
@echo off
javac -cp lib\*;. LoggerTest.java
java -cp lib\*;. LoggerTest
pause
exit
然而,命令行中的输出仍然没有着色。这是我看到的:
因此,消息包含ANSI转义码,但命令行无法解释它们。不过,如果我尝试复制/粘贴此输出并使用另一个bat文件直接回显它,则会看到彩色消息。
4条答案
按热度按时间xkftehaa1#
当我将
disableAnsi="false"
属性添加到<PatternLayout>
时,它起作用了cetgtptt2#
这是如何在windows 7上启用最新log4j颜色的答案:
配置方式:
关键点是将
-DLOG4J_SKIP_JANSI=false
传递给JVM。在此user guide中找到了解决方案。gudnpqoy3#
请尝试执行以下命令:“reg add HKCU\控制台/v虚拟终端级别/t REG_DWORD /d 1”
在Java中:
kognpnkq4#
我必须包含Jansi和Jcabi进行跨操作系统渲染-