#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
классы для перечисления файлов в каталоге, а затем открыть тот, в котором указана дата последнего изменения.