写xml格式的日志文件

时间:2011-02-24 19:22:33

标签: c# .net logging

我们的自定义日志记录系统将信息保存到xml文件中,如下所示:

<?xml version="1.0" standalone="yes"?>
<log>
<entry> msg </entry>
<entry> msg </entry>
.
.
.
</log>

现在我们正在使用StreamWriter进行编写。如果系统崩溃(我们处于开发过程中),则结束标记/元素</log>将不会写入文件,因此无法使用IE正确打开xml文件。我发现有两种方法可以解决这个问题:

选项A:在文件初始化时从最开始写入结束标记,然后为每个新条目执行“插入”。现在我们正在“追加”。

选项B:更改为XmlDocument或XmlWriter。

在选项A中,将“附加”更改为“插入”,我们需要保留当前位置,即位于结束标记</log>之前的位置。并从当前位置写。我找不到一个好方法。

在选项B中,XmlWriter与其他流/编写器几乎相同。没有简单的方法来“插入”。 XmlDocument很容易“插入”,但没有Flush()方法可以调用。我们必须Save()才能写入文件。如果Save()表示关闭流/文件,我不希望为每个条目执行Load()Save()。我认为这太贵了。

你对这个有什么好主意吗?

5 个答案:

答案 0 :(得分:2)

我会设置一个全局异常处理程序:这样你可以最终确定日志,但最重要的是你可以收集与故障相关的细节(堆栈跟踪,但也包括内存状态等)。根据我的经验,当系统“在野外”运行时,一直非常有效地理解崩溃。

答案 1 :(得分:1)

您可能想要在编写日志文件时考虑使用try ... catch ....然后,如果main方法(用于写入日志)失败,则在finally内部切换到不同的方法和/或位置(如果需要)并继续写入日志。

答案 2 :(得分:1)

您可以使用允许您登录XML文件的Enterprise Library等等。我强烈建议你至少看一看。 但是,如果您只想在没有EntLib的其他商品的情况下编写XML日志,则可以尝试使用log4Net。

答案 3 :(得分:1)

您可能需要考虑在应用程序中实现未处理的异常过滤器,并在那里干净地刷新日志。请查看此blog post以获取相关信息。

答案 4 :(得分:0)

您确定使用xml进行日志记录吗? 您可以尝试使用html。

<title>Cool log</title>
<pre>Started</pre>
<pre>Finished</pre>