log4net - 将错误附加到xml文件

时间:2014-11-11 14:01:09

标签: c# xml log4net xmlwriter

我试图将错误附加到xml文件中,我无法以我想要的方式追加。

我正在使用自定义布局覆盖XmlLayout格式方法,如下所示。

public class MyXmlLayout : log4net.Layout.XmlLayout
{
    public static bool isFirstTime = true;

    protected override void FormatXml(System.Xml.XmlWriter writer, LoggingEvent loggingEvent)
    {
        if (isFirstTime)
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("Exceptions");
        }

        writer.WriteStartElement("Exception");

        writer.WriteStartElement("Error");
        writer.WriteAttributeString("Date", loggingEvent.TimeStamp.ToUniversalTime().ToString());
        writer.WriteAttributeString("User", loggingEvent.UserName);
        writer.WriteString(loggingEvent.RenderedMessage);

        writer.WriteEndElement();
        writer.WriteEndElement();

        if (isFirstTime)
        {
            writer.WriteEndElement();
            writer.WriteEndDocument();

            isFirstTime = false;
        }
    }
}

是的,它通过上面的代码附加,但问题是我无法读取xml文件,因为它的格式不正确。

上面代码生成的xml看起来像



<?xml version="1.0" encoding="Windows-1252"?>
<Exceptions>
	<Exception>
		<Error Date="11-11-2014 13:47:53" User="SOURCEEDGE SunilKumar">Exception 1</Error>
	</Exception>
</Exceptions>

<?xml version="1.0" encoding="Windows-1252"?>
<Exceptions>
	<Exception>
		<Error Date="11-11-2014 14:01:44" User="SOURCEEDGE\SunilKumar">Exception 2</Error>
	</Exception>
</Exceptions>
&#13;
&#13;
&#13;

它应该是什么

&#13;
&#13;
<?xml version="1.0" encoding="Windows-1252"?>
<Exceptions>
  <Exception>
    <Error Date="11-11-2014 13:47:53" User="SOURCEEDGE\SunilKumar">Exception 1</Error>
  </Exception>
  <Exception>
    <Error Date="11-11-2014 14:01:44" User="SOURCEEDGE\SunilKumar">Exception 2</Error>
  </Exception>
</Exceptions>
&#13;
&#13;
&#13;

请帮助我们解决问题。

1 个答案:

答案 0 :(得分:0)

根据您的评论更新。

它过早地结束了Exceptions标记,因为你用

告诉了它
if (isFirstTime)
{
    writer.WriteStartDocument();
    writer.WriteStartElement("Exceptions");
}

if (isFirstTime)
{
    writer.WriteEndElement();
}

重新排列代码,以便编写器在文件打开时启动XML文档和Exceptions元素,并在文件关闭之前结束它。

快速谷歌建议这些应分别进入页眉和页脚的覆盖,而不是像你现在的格式覆盖。

这个链接是VB,但是想知道如何做你想做的事情:

http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net/