代码之家  ›  专栏  ›  技术社区  ›  Siddharth Trikha

log4j2高亮模式在文本编辑器中不工作?

  •  3
  • Siddharth Trikha  · 技术社区  · 6 年前

    我使用log4j2在wildfly服务器(jboss 8)上记录我的应用程序。

    我想为我的日志定制一个颜色编码,当我在控制台/终端上看到日志时,它工作得非常好。

    模式如下:

    Log4J.XML:

        <?xml version="1.0" encoding="UTF-8"?>
        <Configuration status="WARN">
        <Appenders>
        <Routing name="Routing">
          <Routes pattern="$${ctx:logFileName}">
    
            <Route>
    
             <RollingFile name="RollingFile" fileName="standalone/log/platform-${ctx:logFileName}.log" filePattern="standalone/log/platform-${ctx:logFileName}-%d{MM-dd-yyyy}.log.gz" append="true">
    
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{id}] %style{[%X{logFileName}}{magenta}] [%t] %highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=magenta} %style{%c{1}:%L}{cyan} - %highlight{%msg%n%throwable}{INFO=white,TRACE=magenta}"/>
    
    
                             .....
    

    但是,当我试图在vi或gedit这样的文本编辑器中打开日志文件时,会得到未知字符,如:

    [32m15:56:30.536 DEBUG com.syn.test.Test.main() @15 - this is debug message
    [m[32m15:56:30.539 DEBUG com.syn.test.Test.main() @19 - this is debug messge 
    [m
    

    我知道颜色编码在文本编辑器上不起作用,但是如何在编辑器中不包含未知字符,并且能够 参见控制台中的颜色编码 .

    1 回复  |  直到 6 年前
        1
  •  3
  •   Dovmo    6 年前

    你看到的那些角色叫做 ANSI color codes . 大多数终端和一些文本查看器会自动将它们正确地转换为各自的颜色。

    我通常看到这些代码只用于

    1. 控制台/终端日志
    2. 正在扫描将使用 more <filename> less -r <filename>
    3. 使用其他ANSI友好工具或日志分析器读取和分析日志

    对于生产日志和真实的服务器日志,我看到这些颜色通常不使用。拥有这些转义代码会使日志搜索的解析变得更加困难,不太“标准”,占用额外的空间,并且不会真正地向日志内容本身添加任何内容。

    如果您确实希望这些颜色能够查看日志,但不希望它们出现在分发或存档的服务器日志中,我将在 log4j 一个是控制台/终端/漂亮的查看器日志,一个用于存档和搜索。