C# 将子节点追加到Log4Net的xml输出

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

我第一次尝试使用Log4Net

我创建了一个用于log4net输出的布局类:

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: