vb.net - 如何设置我的应用程序以可靠地将日志记录数据写入日志文件而不减慢它的速度?
问题描述
我正在编写一个 VB.NET 应用程序,我需要在其中记录到应用程序可执行文件旁边的 .log 文件,其中每一行都有一个时间戳,以及正在执行的函数/代码块的名称。我的应用程序中有一个 Sub 用于处理写入文件:
Imports System.IO
Sub addToLog(contents As String)
If Not File.Exists(logPath) Then createNewLog()
Dim textToWrite = "[" & Date.Now & "] " & contents & vbNewLine
File.AppendAllText(logPath, textToWrite)
End Sub
(调用此 Sub 的每个函数都通过 Contents 变量中的反射指定其名称)。
但是,我很快发现这种方法大大降低了我的应用程序的速度,因为有很多正在执行的函数需要记录,并且 addToLog 调用至少需要 10 毫秒。
我认为我可以采取不同的方法——创建一个全局字符串变量,然后将日志数据写入该全局变量。退出应用程序时,会调用另一个 Sub 将全局变量的内容一次性写入 .log 文件。问题是,如果应用程序崩溃,数据将会丢失,这违背了整个目的。所以我想我会在应用程序事件中添加调用以将 Sub 写入 MyApplication_UnhandledException Sub。这个想法是即使应用程序崩溃,对文件 Sub 的写入仍然会执行。但是,有些事情告诉我,这不是一个非常简单的方法,并且如果应用程序以某种意外方式崩溃,仍然可能会出现该全局变量的内容不会写入 .log 文件的情况。
有人可以建议是否有比我描述的更快、更可靠的日志记录方法?我知道有 VB.NET 的日志库,但我想了解这是如何完成的。
解决方案
推荐阅读
- google-apps-script - 将工作表导出为 PDF 突然停止工作
- primefaces - 在 Primefaces Datatable 中,不使用 sortBy 对列进行排序
- swift - Swift 动态实例化实现相同协议的适当类
- c# - 选择第二个项目时在 VsCode C# (Omnisharp) 中出现错误
- python - 在 python tkinter 中使用画布交换框架
- php - Doctine(Symfony)加载夹具,参考不存在
- apache - While starting apache with apachectl facing issue
- c# - 在我的 dot net 程序中收到“进程无法访问该文件,因为它正被另一个进程使用”的错误
- windows - 在 Go 中调用 windows API 时如何获取 Windows 系统错误代码
- r - 基于另一个值的重复序列