使用appsettings.json配置Serilog RollingFile

Ale*_*der 15 c# serilog .net-core

我正在尝试为.NET Core项目配置Serilog.这就是我的意思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
        }
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我看到的问题JsonFormatter是没有拾取,而是使用默认文本格式化程序获取条目.我尝试过使用"formatter": "JsonFormatter",但结果相同.

如果我在代码中配置Serilog,一切正常:

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

var logger = new Serilog.LoggerConfiguration().WriteTo.Sink(jsonSink);
Run Code Online (Sandbox Code Playgroud)

这是我的相关部分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"
Run Code Online (Sandbox Code Playgroud)

关于如何使这个工作的任何指针?

谢谢!

小智 14

这对我来说效果很好。不再支持“RollingFile”,因此“File”和“pathFormat”只是“path”

"Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Debug",
        "System": "Debug"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "===> {Timestamp:HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "C:\\Temp\\Logs\\log-appstngs.log",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] [{EventId}] {Message}{NewLine}{Exception}",
          "rollOnFileSizeLimit": true,
          "fileSizeLimitBytes": 4194304,
          "retainedFileCountLimit": 10,
          "rollingInterval": "Minute"
        }
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)


Nic*_*rdt 12

formatter参数必须是一个完全合格的类型名称.尝试:

"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
Run Code Online (Sandbox Code Playgroud)

  • @NicholasBlumhardt.它现在正在运作.我犯了最愚蠢的错误.我不小心将"Serilog"节点作为appsettings.json文件中另一个节点的子节. (3认同)
  • 是的 @Nicholas Blumhardt,更新后的配置如下所示: { "Name": "RollingFile", "Args": { "pathFormat": "C:/Logfiles/testapp/log-{Date}.json", "formatter “:”Serilog.Formatting.Json.JsonFormatter,Serilog”,“fileSizeLimitBytes”:2147483648,“retainedFileCountLimit”:5 } } (2认同)

Jer*_*own 7

以下作品:

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");
Run Code Online (Sandbox Code Playgroud)

以下内容也适用(仅显示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();
Run Code Online (Sandbox Code Playgroud)

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}"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

project.json中的NuGet软件包:

  • “ 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”

我的目标框架是net452。

  • @YahooSerious 我有 Serilog.AspNetCore 包,但没有通过 appsettings 配置登录文件,安装上述包解决了它 (2认同)