log4j 和 XML 内容
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的转换模式会附加换行符。尝试更改此:
对此:
因为听起来删除 %n 就可以满足您的需要。当然,请注意,任何需要换行符并使用此附加程序的日志语句都需要显式添加它,如下所示:
log.debug(msg + "\n");
可以将其设为通用,如有必要:我希望有帮助,
-gMale
Your conversion pattern appends a newlines. Try changing this:
To this:
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:I hope that helps,
-gMale
gmale 说得对,省略换行符的代码必须存在于某个地方。
然而,你必须小心;您只想从某些记录的对象中删除换行符,而不是从所有这些对象中删除换行符(从系统中的所有日志调用中共同过滤掉换行符有点过大,我认为这是一个障碍) 。
为了实现这一点,您有两个选择:
\n
替换为System. getProperty("line.separator")
或者,如果您使用的是 Commons Lang,则为SystemUtils.LINE_SEPARATOR
)。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:
\n
withSystem.getProperty("line.separator")
or, if you're using Commons Lang,SystemUtils.LINE_SEPARATOR
).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.