C# 将子节点追加到Log4Net的xml输出
我第一次尝试使用Log4Net 我创建了一个用于log4net输出的布局类:C# 将子节点追加到Log4Net的xml输出,c#,model-view-controller,log4net,C#,Model View Controller,Log4net,我第一次尝试使用Log4Net 我创建了一个用于log4net输出的布局类: public class MyXmlLayout : XmlLayoutBase { protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent) { writer.WriteStartElement("LogEntry"); writer.WriteAttri
public class MyXmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteAttributeString("id", loggingEvent.ThreadName);
writer.WriteStartElement(loggingEvent.MessageObject.ToString());
writer.WriteString(loggingEvent.LoggerName);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
我希望有如下输出:
<LogEntry id=1>
<Begin>MethodName</Begin>
<ExecutionTimeInSec>3473784</ExecutionTimeInSec>
<End>MethodName</End>
</Logentry>
<LogEntry id=1><Begin>MethodName</Begin></LogEntry>
<LogEntry id=1><ExecutionTimeInSec>3473784</ExecutionTimeInSec></LogEntry>
<LogEntry id=1><End>MethodName</End></LogEntry>
方法名
3473784
方法名
但我得到的只是以下几点:
<LogEntry id=1>
<Begin>MethodName</Begin>
<ExecutionTimeInSec>3473784</ExecutionTimeInSec>
<End>MethodName</End>
</Logentry>
<LogEntry id=1><Begin>MethodName</Begin></LogEntry>
<LogEntry id=1><ExecutionTimeInSec>3473784</ExecutionTimeInSec></LogEntry>
<LogEntry id=1><End>MethodName</End></LogEntry>
MethodName
3473784
方法名
我尝试加载XmlDocument,但它说它正在被另一个进程使用,据我所知,log4net目前正在使用这个进程
在添加另一个节点之前,是否有方法检查具有特定id的LogEntry节点是否存在?我不确定您想要什么,输出不符合您的代码,并且您想要的输出也与您的代码不一致。有一些改进可以帮助您开始: loggingEvent.MessageObject.ToString()不应用于获取消息,请使用:loggingEvent.RenderedMessage 据我所知,您必须检查您的代码是否配置为在您的配置中运行。请阅读这篇博文,了解配置以及如何使用XmlLayoutBase: