2017-07-11 5 views
0

Ich habe versucht, Log4Net zum ersten Mal zu verwenden.füge Kindknoten an XML-Ausgabe von Log4Net an

ich eine Layout-Klasse erstellt auf log4net Ausgang verwendet werden:

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(); 
    } 
} 

i eine Ausgabe wie die folgende haben wollen:

<LogEntry id=1> 
    <Begin>MethodName</Begin> 
    <ExecutionTimeInSec>3473784</ExecutionTimeInSec> 
    <End>MethodName</End> 
</Logentry> 

Aber alles, was ich habe ist folgendes:

<LogEntry id=1><Begin>MethodName</Begin></LogEntry> 
    <LogEntry id=1><ExecutionTimeInSec>3473784</ExecutionTimeInSec></LogEntry> 
    <LogEntry id=1><End>MethodName</End></LogEntry> 

Ich habe versucht, das XmlDocument zu laden, aber es sagt, dass es von einem anderen Prozess verwendet wird, den ich verstehe, ist Wird von log4net derzeit verwendet

Gibt es eine Möglichkeit, zu überprüfen, ob der LogEntry-Knoten mit der spezifischen ID vorhanden ist, bevor ein weiterer Knoten hinzugefügt wird?

Antwort

0

Ich bin mir nicht sicher, was Sie wollen, die Ausgabe passt nicht zu Ihrem Code und was Sie als Ausgabe wollen entspricht auch nicht mit Ihrem Code. Es gibt ein paar Verbesserungen für den Einstieg:

loggingEvent.MessageObject.ToString() sollte die Nachricht zu bekommen, verwenden Sie nicht verwendet werden: loggingEvent.RenderedMessage

Soweit ich sehen kann, Sie überprüfen, ob Ihr Code ist sogar so konfiguriert, dass er in Ihrer Konfiguration ausgeführt wird. Bitte haben Sie einen Blick auf diesen Blog-Post bekommen Sie mit der Konfiguration begonnen und wie die XmlLayoutBase verwenden:

log4net-rollingfileappender-with-xml

Verwandte Themen