log4j 和 XML 内容

发布于 2024-09-17 17:04:54 字数 848 浏览 4 评论 0原文

我正在使用 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>

I am using log4j to log request/response XMLs sent by my application.

The problem is that the xml contents are getting logged with newlines.
Any suggestions as to how to format so as to preserve the xml structure as it is received??

Following is my appender:

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋你朝朝暮暮 2024-09-24 17:04:54

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

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

对此:

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

因为听起来删除 %n 就可以满足您的需要。当然,请注意,任何需要换行符并使用此附加程序的日志语句都需要显式添加它,如下所示: log.debug(msg + "\n"); 可以将其设为通用,如有必要:

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

我希望有帮助,

-gMale

Your conversion pattern appends a newlines. Try changing this:

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

To this:

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

because it sounds like removing the %n will do what you need. Of course, note that any log statement requiring a newline AND using this appender, would need to add it explicitly, as in: log.debug(msg + "\n"); which can be made generic, if necessary:

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

I hope that helps,

-gMale

中二柚 2024-09-24 17:04:54

gmale 说得对,省略换行符的代码必须存在于某个地方

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

为了实现这一点,您有两个选择:

  1. 使用 gmale 的示例,手动调用一个方法来清除 XML 字符串中的换行符,然后再将其传递给 log4j(不过,我会将 \n 替换为 System. getProperty("line.separator") 或者,如果您使用的是 Commons Lang,则为 SystemUtils.LINE_SEPARATOR)。
  2. 使用自定义对象包装您的 XML 字符串,并配置 Log4J 以添加一个 ObjectRenderer,它将您的自定义对象呈现为字符串。

这两种方式中的任何一种都会导致换行符从您想要的内容类型中删除,而不是从地球上的所有日志记录中删除换行符。

gmale is right by saying that the code of omitting the newline character must exists somewhere.

However, you have to be careful; you only want to remove newlines from certain logged objects, not from all of them (collectively filtering out newlines from all log calls in the system is a bit of an overkill and I'd consider it a handicap).

To achieve this, you have two options:

  1. Manually invoke a method to clear newlines from the XML string before passing it to log4j, using gmale's example (however I'd replace \n with System.getProperty("line.separator") or, if you're using Commons Lang, SystemUtils.LINE_SEPARATOR).
  2. Wrap your XML string with a custom object, and configure Log4J to add an ObjectRenderer that will render your custom object into a String.

Any of these two ways will result in newlines being removed from exactly the type(s) of content you want, rather than collectively for all logging on the planet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文