You mean log4j 1.1.3 not 1.3.1?
In any case, the code add a renderer to a hierarchy is as follows:
import org.apache.log4j.LogManager; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RendererSupport; import org.apache.log4j.or.RendererMap;
...
LoggerRepository repo = LogManager.getLoggerRespository();
if(repo instanceof RendererSupport) {
RendererMap.addRenderer((RendererSupport) repo, Node.class,
nodeRenderer);
}I hope this helps,
At 04:28 PM 3/3/2003 +0000, Ollie Brady wrote:
Hi,
I'm porting an application from Log4j 1.1.3 to 1.2.8 but am having a problem adding an ObjectRenderer that I wrote.
The ObjectRenderer, NodeRenderer, is used to dump XML nodes to log without formatting/altering them.
I would like to add the new renderer without using a config file, i.e. all in code.
The old code looked like
static { Category catRoot = Category.getRoot(); catRoot.setPriority(Priority.INFO); Layout layout = new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} %-5p %-30.30c %x - %m\n"); APPENDER = new ConsoleAppender(); ConsoleAppender ca = (ConsoleAppender)APPENDER; ca.setLayout(layout); ca.setName("Console Logger"); ca.setWriter(new java.io.OutputStreamWriter(System.out)); catRoot.addAppender(APPENDER);
// create renderer for XML messages ObjectRenderer nodeRenderer = new ObjectRenderer() { public String doRender(Object obj) { return XMLHelper.nodeToString((Node)obj); } }; catRoot.getHierarchy().addRenderer(Node.class, nodeRenderer); }
So in the new version I have created two classes..
class NodeRenderSupport { private RendererMap m_map=new RendererMap();
public RendererMap getRendererMap() { return m_map; }
public void setRenderer(Class renderedClass, ObjectRenderer renderer) { m_map.put(renderedClass, renderer); } };
class NodeObjectRenderer implements ObjectRenderer { public String doRender(Object obj) { return XMLHelper.nodeToString((Node)obj); } };
..and then have a line like this in the application..
static { Category catRoot = Category.getRoot(); catRoot.setPriority(Priority.INFO); Layout layout = new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} %-5p %-30.30c %x - %m\n"); APPENDER = new ConsoleAppender(); ConsoleAppender ca = (ConsoleAppender)APPENDER; ca.setLayout(layout); ca.setName("Console Logger"); ca.setWriter(new java.io.OutputStreamWriter(System.out)); catRoot.addAppender(APPENDER);
NodeRenderSupport nodeRendererSupport=new NodeRenderSupport(); nodeRendererSupport.setRenderer(Node.class, new NodeObjectRenderer());
// How/where to add the NodeRenderSupport??
}
..but where then do I then add the nodeRendererSupport?? I cannot find anywhere to explicitly add the renderer..? Any comments welcome.
Regards, /OB.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--
Ceki
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
