2015-08-20 7 views
3

Я пытаюсь использовать WriteTo.RollingFile с Serilog как:Serilog RollingFile

var log = new LoggerConfiguration().WriteTo.RollingFile(
        @"F:\logs\log-{Date}.txt", 
        LogEventLevel.Debug).CreateLogger(); 
      log.Information("this is a log test"); 

Я понимаю, что файл журнала будет создан и назван на основе даты, а также он будет писать к новый файл каждый день, однако я получаю новый файл журнала для каждой записи в журнале в тот же день! Как настроить Serilog для записи в новый файл каждый день, так что в идеале у меня есть один файл журнала в день?

И существует ли процесс архивирования для удаления файлов старше 7 дней?

+0

Кроме того, вы должны убедиться, что вы настраиваете только один раз журнал , а затем повторите использование одного и того же экземпляра 'log' для всех сообщений. НТН! –

ответ

11

Попробуйте ниже: Имя файла

var log = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .WriteTo.RollingFile(@"f:\log\log.txt", retainedFileCountLimit:7) 
      .CreateLogger(); 

Журнал будет автоматически срубы 20150819.txt и т.д. Вам не нужно указать дату.

+0

Это решает один из его вопросов. Другой вопрос, который я также имел о нескольких файлах журнала, создаваемых в тот же день. Но один из комментариев прибил его по голове. Настройте только один раз и используйте те же экземпляры журналов для всех сообщений. Я настроил один раз, но я пытаюсь понять, как использовать его во всем приложении. Если я не настраиваю в каждом классе, то регистрация останавливается. Это связано с моим опытом. –

2

В соответствии с этим убедитесь, что вы затем используете экземпляр «Лог» с глобальным охватом.

Пример:

Log.Information("Hello world"); 
0

Вот способ использовать Serilog с web.config в качестве ASP.NET MVC приложение 4/5.

В вашем web.config добавить следующее:

<add key="serilog:minimum-level" value="Information" /> 
<add key="serilog:minimum-level:override:Microsoft" value="Information" /> 
<add key="serilog:minimum-level:override:System" value="Information" /> 
<add key="serilog:using:RollingFile" value="Serilog.Sinks.RollingFile" /> 
<add key="serilog:write-to:RollingFile.pathFormat" value="./Logs/log-{Date}.txt" /> 
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}" /> 
<add key="serilog:write-to:RollingFile.retainedFileCountLimit" value="10" /> 

Тогда в Application_Start из global.asax добавить следующее:

// Get application base directory 
string basedir = AppDomain.CurrentDomain.BaseDirectory; 

// Setup Serilog for logging 
Log.Logger = new LoggerConfiguration() 
      .ReadFrom.AppSettings() 
      .WriteTo.RollingFile(basedir + "/Logs/log-{Date}.txt") 
      .CreateLogger(); 
Смежные вопросы