Я пишу приложение 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 мс.
Я подумал, что мог бы использовать другой подход - создать глобальную переменную String и вместо этого записать данные регистрации в эту глобальную переменную. Когда приложение закрывается, вызывается другой Sub, чтобы сразу записать содержимое этой глобальной переменной в файл .log. Проблема в том, что в случае сбоя приложения данные будут потеряны, что наносит ущерб всей цели. Поэтому я подумал, что добавлю вызов для написания Sub в Sub MyApplication_UnhandledException в событиях приложения. Идея состоит в том, что запись в файл Sub все равно будет выполняться даже в случае сбоя приложения. Однако что-то подсказывает мне, что это не очень надежный способ, и все же могут быть случаи, когда содержимое этой глобальной переменной не записывается в файл .log, если приложение аварийно завершает работу.
Может кто-нибудь посоветовать, есть ли более быстрые и надежные методы ведения журнала, чем тот, который я описал? Я знаю, что есть библиотеки журналов для VB.NET, но я хочу узнать, как это сделать.