You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "Thorsten Scherler (JIRA)" <ji...@apache.org> on 2013/02/20 19:05:13 UTC

[jira] [Created] (COCOON3-121) Create a generic generator that creates a root elemement and wraps the destination stream into it

Thorsten Scherler created COCOON3-121:
-----------------------------------------

             Summary: Create a generic generator that creates a root elemement and wraps the destination stream into it
                 Key: COCOON3-121
                 URL: https://issues.apache.org/jira/browse/COCOON3-121
             Project: Cocoon 3
          Issue Type: Bug
          Components: cocoon-optional
    Affects Versions: 3.0.0-beta-1
            Reporter: Thorsten Scherler
            Assignee: Thorsten Scherler
             Fix For: 3.0.0-beta-1


If you use something like ch.qos.logback.classic.log4j.XMLLayout you can create xml based log files. However the problem is that it does not add root element making the resulting file not well-formed. 

You can activate the logging in your logback.xml like 

   <appender name="FAILS" class="ch.qos.logback.core.FileAppender">
        <file>${crawler.log.error}</file>
        <append>false</append>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
          <layout class="ch.qos.logback.classic.log4j.XMLLayout">
            <locationInfo>true</locationInfo>
          </layout>
        </encoder>
    </appender>

The implemented solution has the following configuration in spring:

  <bean name="generator:log4j" class="org.apache.cocoon.optional.pipeline.components.sax.generator.AddRootElementGenerator" scope="prototype">
    <property name="encoding" value="UTF-8"/>
    <property name="localName" value="events"/>
    <property name="prefix" value="log4j"/>
    <property name="namespace" value="http://jakarta.apache.org/log4j/"/>
  </bean>

and later parse the file that the appender gives like:
<map:pipeline>
      <map:match pattern="errorLogs">
        <map:generate src="${crawler.log.error}" type="log4j"/>
        <map:serialize type="xml" />
      </map:match>
    </map:pipeline>

which will result in something like:
<?xml version="1.0" encoding="UTF-8"?>
<log4j:events xmlns:log4j="http://jakarta.apache.org/log4j/">
  <log4j:event logger="org.apache.droids.exception.ExceptionHandler" timestamp="1361325224196" level="ERROR" thread="main">
   <log4j:message><![CDATA[org.apache.droids.core.DroidsException: org.apache.droids.core.DroidsException: org.apache.droids.core.DroidsException: org.apache.http.client.HttpResponseException: Internal Server Error http://localhost:8888/xxx/details/xxx]]>
  </log4j:message>
  <log4j:locationInfo class="org.apache.droids.exception.ExceptionHandler" method="handleException" file="ExceptionHandler.java" line="23"/>
 </log4j:event>
</log4j:events>

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira