如何使用Log4j XMLLayout在每一行中获取XML结构数据?

时间:2010-12-19 20:28:52

标签: xml log4j

使用Log4J XMLLayout,我想在每个日志事件(日志行)中放置一系列包含在标签中的字段。 < x>一些信息< / x> < y>更多信息< / y>

在XML记录器的上下文中,这似乎是一种自然的方式,可以实现更加结构化的日志。有没有一种标准的方法,或者我必须自己用这些标签构建字符串?

我还可以使用带有XML标签的PatternLayout包装某些字段。我必须自己逃避XML,似乎XMLLayout应该是用于XML的。

另一个问题是XMLLayout将日志行放入CDATA块,这当然意味着该行中的任何XML都不能作为XML进行解析。

2 个答案:

答案 0 :(得分:1)

似乎没有内置的功能。

我建议你这样做:因为你已经有了log4j,所以你有它的源代码。

找到文件org.apache.log4j.xml.XMLLayout。复制它,将它的包名重命名为适合你的应用程序的东西,只需在适当的地方删除\r\n(这个文件不大,所以它应该不是问题)并在log4j的配置文件中做一个引用使用您的新布局。

答案 1 :(得分:0)

当我使用log4j XMLLayout输出xml数据时,我刚刚使用

logger.info("]]>"+xmlMsg+"<![CDATA[");

这是一种懒惰的方式,但它对我有用,因为并非我的所有日​​志消息都是XML,所以那些没有被保留的文件。