2016-11-30 11 views
9

Próbuję skonfigurować Serilog dla projektu .NET Core. Oto co mam w appsettings.json:Konfigurowanie pliku Serilog RollingFile z 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 
     } 
     } 
    ] 
    } 

Problemem jest to, że widzę JsonFormatter nie podniósł, a zamiast tego dostaję wpisy za pomocą domyślnego formatowania tekstu. Próbowałem użyć "formatter": "JsonFormatter", ale otrzymałem ten sam wynik.

To wszystko działa dobrze, jeśli mogę skonfigurować Serilog w kodzie:

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

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

Oto odnośny fragment moich 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" 

Wszelkie wskazówki, w jaki sposób uzyskać tej pracy?

Dzięki!

Odpowiedz

6

Argument formatter musi być w pełni kwalifikowaną nazwą typu. Spróbuj:

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

Dzięki @Nicholas Blumhardt, niestety nadal otrzymuję ten sam wynik ... Czy istnieje możliwość dodania tego przykładu do dokumentacji? – Alexander

+0

Hi @Alexander - czy zmieniłeś nazwę parametru z 'textFormatter' na' formatter'? –

+0

Tak @Nicholas Blumhardt, oto jak zaktualizowany config wygląda następująco: { "Nazwa": "RollingFile" "args": { "pathFormat": „C:/Logfiles/testapp/log- {data}. json”, "formater": "Serilog.Formatting.Json.JsonFormatter, Serilog" "fileSizeLimitBytes": 2147483648, "retainedFileCountLimit": 5 } } – Alexander

4

następujące utwory:

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"); 

Poniższa działa również (tylko pokazując CreateLogger porcja):

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(); 

Plik appsettings.json (odpowiedni rozdział tutaj jest 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}" 
     } 
     } 
    ] 
    } 
} 

Pakiety Nuget w 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"

Moje ramy docelowej to net452.

+1

Jeremy Ray Brown, o ile widzę, że nie używasz formatera Json - to jest ten fragment, którego nie mogłem uzyskać. Sam RollingFile działa dobrze. – Alexander

+0

OK. Nieporozumienie. Będę kontynuował, kiedy używam Jsona Formattera. –

Powiązane problemy