by Damian
1. December 2011 21:10
It doesn't appear possible to get exception infomation into the chainsaw target renderer, so I got around this by extending the Log4JXmlEventLayout and butchering the xml.
Chalk this one up as a nasty hack, it's not pretty.
[Target("ChainsawExtended")]
public class ChainsawExtendedTarget : ChainsawTarget
{
private readonly Log4JXmlEventLayoutExtended _layout = new Log4JXmlEventLayoutExtended();
public override Layout Layout
{
get { return _layout; }
set { }
}
private class Log4JXmlEventLayoutExtended : Log4JXmlEventLayout
{
protected override string GetFormattedMessage(LogEventInfo logEvent)
{
string s = base.GetFormattedMessage(logEvent);
if(logEvent.Exception == null)
{
return s;
}
s = s.Replace("<log4j:event", "<log4j:event xmlns:log4j=\"http://nlog-project.org/dummynamespace/\"");
var element = XDocument.Parse(s);
var messageElement = element.Descendants().Where(e => e.Name.LocalName == "message").Single();
messageElement.Value += Environment.NewLine + logEvent.Exception;
s = element.ToString();
s = s.Replace(" xmlns:log4j=\"http://nlog-project.org/dummynamespace/\"", string.Empty);
return s;
}
}
}