我们的自定义日志记录系统将信息保存到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()
。我认为这太贵了。
答案 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>