【问题标题】:Encode pattern layout in apache log4j在 apache log4j 中编码模式布局
【发布时间】:2023-03-17 23:13:01
【问题描述】:

尝试使用以下模式布局打印编码的日志消息,以便 \n 不会在日志中作为新行打印。

  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{MM-dd-yyyy HH:mm:ss,SSS} %5p [%t] (%F:%L) - %enc{%m}%n"/>
  </layout>

但它实际上在每条消息之前打印%enc{,并在消息末尾打印},而不是对它们进行编码。 \n 也没有被替换。

示例:对于此代码logger.info("my \n message"),以下是输出日志

08-01-2018 01:26:37,642  INFO [localhost-startStop-1] (ClassName1.java:53) - %enc{my 
message}

应该是这样的,

08-01-2018 01:26:37,642  INFO [localhost-startStop-1] (ClassName1.java:53) - my message

关注此文档https://logging.apache.org/log4j/log4j-2.1/manual/layouts.html 但我不确定该模式有什么问题。

【问题讨论】:

    标签: java apache log4j


    【解决方案1】:

    您应该确定大括号中的编码格式。例如%enc{%m}{HTML} 将消息编码为 HTML 格式。你也可以使用 CRLF:enc{%m}{CRLF}

    【讨论】:

    • 仍然像 %enc{ ... }{CRLF} 打印而没有实际编码。问题中提到的布局 xml 标记位于 下。可以吗?除此编码外,日期格式等模式中的所有其他元素都可以正常工作。
    • DailyRollingFileAppender 只是将时间戳作为日志的前缀,但它的默认配置可能与您尝试执行的操作重叠。如果是这种情况,您可能需要实现自定义附加程序,这很痛苦。使用 DailyRollingFileAppender 的layout 参数确定图案布局。
    • 顺便提一下,DRFA 还为每天的日志记录保存单独的文件。
    • 试试,%d{MM-dd-yyyy HH:mm:ss,SSS} %5p [%t] (%F:%L) - %enc{% m}{CRLF}
    • 也尝试删除 %enc 之前的破折号
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2016-12-28
    • 2019-09-05
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多