Хорошо, поэтому я работаю в VB.NET, вручную записывая журналы ошибок в файлы журнала (да, я знаю, я не звонил). Теперь, если файлы превышают произвольный размер, когда функция переходит на запись новых данных об ошибке, она должна начать новый файл с новым именем файла.FileInfo возвращает неправильное значение?
Вот функция:
Dim listener As New Logging.FileLogTraceListener
listener.CustomLocation = System.Configuration.ConfigurationManager.AppSettings("LogDir")
Dim loc As String = DateTime.UtcNow.Year.ToString + DateTime.UtcNow.Month.ToString + DateTime.UtcNow.Day.ToString + DateTime.UtcNow.Hour.ToString + DateTime.UtcNow.Minute.ToString
listener.BaseFileName = loc
Dim logFolder As String
Dim source As String
logFolder = ConfigurationManager.AppSettings("LogDir")
If ex.Data.Item("Source") Is Nothing Then
source = ex.Source
Else
source = ex.Data.Item("Source").ToString
End If
Dim errorFileInfo As New FileInfo(listener.FullLogFileName)
Dim errorLengthInBytes As Long = errorFileInfo.Length
If (errorLengthInBytes > CType(System.Configuration.ConfigurationManager.AppSettings("maxFileSizeInBytes"), Long)) Then
listener.BaseFileName = listener.BaseFileName + "1"
End If
Dim msg As New System.Text.StringBuilder
If String.IsNullOrEmpty(logFolder) Then logFolder = ConfigurationManager.AppSettings("LogDir")
msg.Append(vbCrLf & "Exception" & vbCrLf)
msg.Append(vbTab & String.Concat("App: AppMonitor | Time: ", Date.Now.ToString) & vbCrLf)
msg.Append(vbTab & String.Concat("Source: ", source, " | Message: ", ex.Message) & vbCrLf)
msg.Append(vbTab & "Stack: " & ex.StackTrace & vbCrLf)
listener.Write(msg.ToString())
listener.Flush()
listener.Close()
Я это выполнение в цикле для целей тестирования, так что я могу видеть то, что происходит, когда он получает (скажем) 10000 ошибок во всех сразу. Опять же, я знаю, что есть более эффективные способы справиться с этим системно, но это был код, который мне сказали реализовать.
Как я могу надежно получить размер файла журнала перед тем, как писать ему, как я пытаюсь сделать выше?
Почему вы сравнивая размер файла, который является 'Long', к' Double'? Этот максимальный размер также должен быть «длинным», а затем вы можете сравнить два значения правильно. Почему именно вы считаете, что «Длина» ошибается? – jmcilhinney
Ну, это двойная вещь, потому что я, по-видимому, дурак. И я думаю, что это неправильно, потому что я тестирую с использованием фиктивных данных и значений, поэтому он всегда * бросает ошибку, и я знаю, сколько байтов каждая ошибка добавляет к файлу. После регистрации четырех ошибок он должен перейти к новому файлу. Когда я проходил через это, это делалось. Когда я разрешаю ему работать, это не так. –
@jmcilhinney Спасибо за ваши вопросы - они помогли мне добраться до корня моей проблемы. –