Я хочу проанализировать сгенерированный log4j XML-журнал.Внутри xml находится узел с бросаемым (если есть).Этот текст (многострочный, с вкладками) инкапсулирован в тег CDATA.
Это фрагмент всего файла:
<log4j:event logger="org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver" timestamp="1330083921521" level="ERROR" thread="http-8080-1">
<log4j:message><![CDATA[Exception occurred when processing request: [GET] /test/log/show
Stacktrace follows:]]></log4j:message>
<log4j:throwable><![CDATA[org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at test.LogController$_closure2.doCall(LogController.groovy:21)
at test.LogController$_closure2.doCall(LogController.groovy)
at java.lang.Thread.run(Thread.java:662)
]]></log4j:throwable>
</log4j:event>
Я анализирую его с помощью groovys XmlParser:
def parser = new XmlParser(false, false).parse(new File("stack.log"))
return parser.'log4j:event'.collect { l ->
LogEntry entry = new LogEntry()
entry.with {
level = l.'@level'
message = l.'log4j:message'.text()
thread = l.'@thread'
logger = l.'@logger'
timestamp = new Date(l.'@timestamp' as long)
throwable = l.'log4j:throwable'?.text() ?: ''
}
entry
}
Поле «throwable» содержит весь текст, но без CR / LF.
Кто-нибудь знает, как с этим справиться?
Заранее спасибо ...