log4j和XML内容

时间:2010-09-03 06:53:23

标签: xml log4j

我正在使用log4j来记录我的应用程序发送的请求/响应XML。

问题是xml内容是用换行符记录的。 有关如何格式化的建议,以便在收到时保留xml结构吗?

以下是我的追随者:

<appender name="xmlFileAppender" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.log" />
   <param name="Append" value="true" />
   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.log" />
       <param name="FileNamePattern" value="d:/LOG/log4j/appName_${weblogic.Name}_XMLS.%d.log.gz" />
   </rollingPolicy>
   <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]%n"/>
   </layout>
</appender>

2 个答案:

答案 0 :(得分:0)

您的转换模式会附加换行符。尝试更改此内容:

 <param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]%n"/>

对此:

<param name="ConversionPattern" value="[%d{DATE}][%-p][%c{3}%x][%m]"/>

因为听起来像删除%n会做你需要的。当然,请注意,任何需要换行符并使用此appender的日志语句都需要显式添加,如:log.debug(msg + "\n");,如果需要,可以使其成为通用语句:

final String newLine = System.getProperty("line.separator");
...
log.debug(msg + newLine);

我希望有所帮助,

-gMale

答案 1 :(得分:0)

gmale是对的,说省略换行符的代码必须存在某处

但是,你必须要小心;你只想从某些已记录的对象中删除换行符,而不是从所有这些对象中删除换行符(从系统中的所有日志调用中过滤掉换行符有点过分,我认为这是一个障碍)

要实现这一目标,您有两种选择:

  1. 使用gmale的示例手动调用方法从XML字符串中清除换行符,然后将其传递给log4j(但是我会用\n替换System.getProperty("line.separator"),或者,如果你使用的是 Commons Lang SystemUtils.LINE_SEPARATOR)。
  2. 使用自定义对象包装XML字符串,并配置Log4J以添加ObjectRenderer,将自定义对象呈现为字符串。
  3. 这两种方式中的任何一种都会导致换行符与您想要的内容类型完全相同,而不是集体用于所有日志记录。