Serilog: открыть файл журнала

#c# #serilog

#c# #serilog

Вопрос:

Есть ли способ получить полное имя файла из класса журнала? Регистратор создает файл в формате C:MyPathlog-20160631.txt

Я не могу получить доступ к исходному имени файла, которое я использовал для инициализации регистратора.

Редактировать: вот инициализация регистратора:

 Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.LiterateConsole()
            .WriteTo.RollingFile(@"C:MyPathlog.txt")
            .CreateLogger();
  

В каждом месте кода я могу использовать, например Log.Information() , но как я получаю информацию о приемнике? Я хочу получить имя файла, которое я передал в rolling file sink.

Мой текущий обходной путь — сгенерировать реальный файл вручную (сумасшедший уродливый код):

 public string LogFilename
{
   get
   {
      string path = Path.GetDirectoryName(LogFilenameTemplate);
      string filenameWithoutExtension = Path.GetFileNameWithoutExtension(LogFilenameTemplate);
      string extension = Path.GetExtension(LogFilenameTemplate);
      string date = DateTime.Now.ToString("yyyyMMdd");
      string fullFilename = Path.Combine(path, filenameWithoutExtension   "-"   date   extension);
      return fullFilename;
   }
}
  

Формат, который я получил из репозитория GitHub.

Комментарии:

1. Неясно, что вы подразумеваете под «Я не могу получить доступ к исходному имени файла, которое я использовал для инициализации регистратора».. Пожалуйста, опубликуйте код инициализации serilog и точно укажите, где и зачем вам нужно имя файла.

2. Я добавил пример кода, расширенное описание и текущее обходное решение.

3. Просматривая код , я не думаю, что возможно получить имя файла, которое используется в данный момент. Я думаю, еще один вопрос: зачем вам это нужно? Возможно, есть другой способ сделать то, что вам нужно, не зная имени файла.

4. Я передаю регистратор в другую часть приложения (запрограммированный не мной). И есть необходимость открыть файл журнала в пользовательском интерфейсе. Так что я должен также передать 🙂 имя файла с уродливым обходным путем.

5. Если вам абсолютно необходимо использовать файловую систему для совместного доступа к журналам, убедитесь, что вы установили shared флаг true равным . Но может быть проще найти другой способ совместного использования данных журнала, чем полагаться на имя файла.

Ответ №1:

Нет, нет способа получить имя файла из Serilog. Ваш лучший доступный вариант — использовать System.IO классы для перечисления файлов в каталоге, а затем открыть тот, в котором указана дата последнего изменения.