2016-11-30 3 views
9

Я пытаюсь настроить Serilog для проекта .NET Core. Вот что у меня в appsettings.json:Настройка Serilog RollingFile с appsettings.json

"Serilog": 
{ 
    "MinimumLevel": "Verbose", 
    "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"], 
    "WriteTo": [ 
     { "Name": "RollingFile", 
     "Args": { 
      "pathFormat": "C:/Logfiles/testapp/log-{Date}.json", 
      "textFormatter": "JsonFormatter", 
      "fileSizeLimitBytes": 2147483648, 
      "retainedFileCountLimit": 5 
     } 
     } 
    ] 
    } 

Проблема, которую я вижу, что JsonFormatter не взял, а вместо этого я получаю записи с помощью текста по умолчанию форматера в. Я попытался использовать "formatter": "JsonFormatter", но получил тот же результат.

Это все работает нормально, если настроить Serilog в коде:

var jsonSink = new RollingFileSink(config["Logger:FilePath"], new JsonFormatter(), 2147483648, 5); 

var logger = new Serilog.LoggerConfiguration().WriteTo.Sink(jsonSink); 

Вот соответствующий раздел из моих project.json:

"Serilog": "2.2.1", 
"Serilog.Extensions.Logging": "1.1.0", 
"Serilog.Sinks.Literate": "2.0.0", 
"Serilog.Sinks.Seq": "2.0.0", 
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
"Microsoft.Extensions.Configuration.Json": "1.0.0", 
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", 
"Microsoft.Extensions.Logging": "1.0.0", 
"Microsoft.Extensions.Logging.Console": "1.0.0", 
"Microsoft.Extensions.Logging.Debug": "1.0.0", 
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
"Serilog.Enrichers.Thread": "2.0.0", 
"Serilog.Enrichers.Process": "2.0.0", 
"Serilog.Sinks.ColoredConsole": "2.0.0", 
"Serilog.Settings.Configuration": "2.2.0" 

Любые указатели о том, как получить эту работу?

Спасибо!

ответ

6

Аргумент formatter должен быть полностью квалифицированным типом. Попробуйте:

"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog" 
+0

Спасибо @Nicholas Blumhardt, к сожалению, я все равно получаю тот же результат ... Есть ли шанс добавить этот пример в документацию? – Alexander

+0

Hi @Alexander - вы изменили имя параметра из 'textFormatter' в' formatter'? –

+0

Да @Nicholas Blumhardt, вот как обновленная конфигурация выглядит следующим образом: { "Имя": "RollingFile", "Args": { "pathFormat": «C:/Logfiles/TestApp/лог- {Дата}. JSON», "форматировщик": "Serilog.Formatting.Json.JsonFormatter, Serilog", "fileSizeLimitBytes": 2147483648, "retainedFileCountLimit": 5} } – Alexander

4

следующие работы:

var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 

     Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "C:\\logs\\log-{Date}.txt"), 
          outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] [{EventId}] {Message}{NewLine}{Exception}") 
      //.ReadFrom.Configuration(Configuration) 
      .CreateLogger(); 

     Log.Logger.Information("test"); 

Следующая также работает (только показывая CreateLogger часть):

Log.Logger = new LoggerConfiguration() 
      //.MinimumLevel.Debug() 
      //.WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "C:\\logs\\log-{Date}.txt"), 
      //    outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] [{EventId}] {Message}{NewLine}{Exception}") 
      .ReadFrom.Configuration(Configuration) 
      .CreateLogger(); 

Файл appsettings.json (соответствующий раздел здесь Serilog) :

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    }, 
    "Serilog": { 
    "MinimumLevel": "Debug", 
    "WriteTo": [ 
     { 
     "Name": "RollingFile", 
     "Args": { 
      "pathFormat": "C:\\logs\\log-{Date}.txt", 
      "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] [{EventId}] {Message}{NewLine}{Exception}" 
     } 
     } 
    ] 
    } 
} 

Пакеты NuGet в project.json:

  • "Serilog": "2.3.0",
  • "Serilog.Extensions.Logging": "1.3.1",
  • «Serilog.Sinks.RollingFile «: "3.2.0",
  • "Serilog.Sinks.File": "3.1.1",
  • "Serilog.Settings.Configuration": "2.2.0"

Моя целевая структура есть нет452.

+1

Джереми Рэй Браун, насколько я вижу, вы не используете форматировщик Json - это тот бит, с которым я не мог работать. RollingFile работает отлично. – Alexander

+0

Хорошо. Непонимание. Я буду следить, когда я использую Json Formatter. –

Смежные вопросы