Как настроить приложение для надежной записи данных журнала в файл журнала, не замедляя его? - PullRequest
0 голосов
/ 06 мая 2019

Я пишу приложение 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, но я хочу узнать, как это сделать.

...