C# 编写xml格式的日志文件

C# 编写xml格式的日志文件,c#,.net,logging,C#,.net,Logging,我们定制的日志记录系统将信息保存到xml文件中,如下所示: <?xml version="1.0" standalone="yes"?> <log> <entry> msg </entry> <entry> msg </entry> . . . </log> 味精 味精 . . . 现在我们正在使用StreamWriter进行编写。如果系统崩溃(我们处于开发的中间),则结束标记/元素, 将不会写入文件,因此

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

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

味精
味精
.
.
.
现在我们正在使用StreamWriter进行编写。如果系统崩溃(我们处于开发的中间),则结束标记/元素,<代码> <代码>将不会写入文件,因此XML文件不能正确打开。我发现有两种可能的选项来纠正:

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

选项B:更改为XmlDocument或XmlWriter

在选项A中,将“append”更改为“insert”,我们需要保留当前位置,它就在结束标记前面,
,。并从当前位置写入。我没有找到一个好办法

在选项B中,XmlWriter几乎与其他流/写入程序相同。“插入”并非易事。XmlDocument很容易“插入”,但是没有
Flush()
方法可调用。我们必须
Save()
才能将其写入文件。如果
Save()
意味着关闭流/文件,我不想对每个条目执行
Load()
Save()
。我想那太贵了


您对此有什么好主意吗?

您可能需要考虑使用try。。。接住最后,在写入日志文件时。然后,如果主方法(用于写入日志)失败,则最终在内部切换到其他方法和/或位置(如果需要)并继续写入日志。

您可以使用允许登录到XML文件和更多内容的。我强烈建议你,至少,看看这个。
但是,如果您只想编写一个XML日志而不使用EntLib中的其他产品,您可以尝试使用log4Net。例如,我会设置一个全局异常处理程序:这样您可以完成日志,但最重要的是,您可以收集与故障相关的详细信息(stacktrace和内存状态等)。根据我的经验,当系统在“野生”中运行时,稍后了解崩溃是非常有效的。

< p>您可能需要考虑在应用程序中实现未处理的异常过滤器,并注意清理您的日志。请看这个以获取信息

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

<title>Cool log</title>
<pre>Started</pre>
<pre>Finished</pre>
酷日志
起动
完成了

您能只编写
元素吗?这将始终是一个格式良好的文档片段,您的系统可以在查看它之前将其拼接到
标记之间。这是一个好主意。我会试试的。我不能理解“全局异常处理程序”。它将捕获所有异常?我们确实有未处理异常的处理程序。我是指未处理异常的处理程序。如果整个系统崩溃和关闭,那一定是因为未处理的异常-除了硬件故障或进程外部的问题。这里也有同样的问题<代码>尝试删除class=“sys”-未定义。您是说在主方法中捕获异常和未处理异常,并始终在Finally块中写入结束标记?但将入口应用程序放入try-catch块是一个好主意吗?