2017-08-15 101 views
1

我有以下日志语句,我期望在日志中产生一条彩色线条,但它没有。日志被设置为写入标准输出,还有其他的东西是写入彩色输出,工作正常,所以我知道它不是终端的问题。对log4j2消息使用颜色

LoggerFactory.getLogger("foo").info("no color \\033[1;35m COLOR \\033[0m no color") 

这就是在日志中显示的内容。

15:59:25 15:59:25 20:59:25,268: INFO [MyClazz] no color \033[1;35m COLOR \033[0m no color 

是否可以在日志消息中添加颜色?如果是的话如何?

回答

1

我建议不要在日志中存储ANSI颜色转义序列/代码。至少你应该测试输出设备是否为TTY,并且只有在输出设备是“彩色”输出的情况下才能写入。

这就是说,你的问题是在逃避反斜杠,\。您的输出应包含实际的\033字符(八进制),即\x1b(十六进制), 或27(十进制)。试试看这样:

LoggerFactory.getLogger("foo").info("no color \033[1;35m COLOR \033[0m no color") 
+0

为什么你会建议不要将“在存储日志中存储ANSI颜色转义序列/代码”。我问,因为有很多其他东西以各种颜色输出到我的日志中。 –

+1

嗯,基本上是因为你只在终端打印时才会使用“特殊的”二进制序列(在文本文件中),它们是特定的(并且有意义)。如果您只是在终端中查看日志,那没问题,但是它使日志处理对于纯文本工具或非终端查看设备更加困难。 UNIX工具(如'grep')在缺省情况下(如果不是强制的话)只有在stdout转到终端(以及文件中的纯文本)时才会打印彩色输出。 – randomir

相关问题