如何使用Serilog的ReadFrom.KeyValuePairs方法?

时间:2017-03-18 13:57:58

标签: c# asp.net-core serilog

在我的appsettings.json中我写过:

<link href="">

并在构造函数

中的startup.cs文件中
{
    "Logging": {
        "PathLogsFile": "./Logs",
         "IncludeScopes": false,
         "LogLevel": {
             "Default": "Debug",
             "System": "Information",
             "Microsoft": "Information"
         }
    }
}

但是来自appsettings的最低级别读取并不起作用。 有任何想法吗?我该如何解决?

3 个答案:

答案 0 :(得分:2)

我认为您不应该使用<script type="text/javascript"> $(document).ready(function() { $('#record-table').DataTable({ "ajax": { url : "<?php echo site_url("mycontroller/dataa") ?>", type : 'GET' }, }); }); </script> 并使用Parameswar Rao建议的ReadFrom.KeyValuePairs。但是,如果您真的想使用KeyValuePair,请使用以下代码:

ConfigurationBuilder        .AddJsonFile("appsettings.json")

重要的是,您不要在appSettings中使用var logger = new LoggerConfiguration() .ReadFrom.KeyValuePairs(new Dictionary<string, string>() { { "write-to:File.fileSizeLimitBytes","20971520" }, { "write-to:File.rollOnFileSizeLimit","true" }, { "write-to:File.retainedFileCountLimit","10" }, { "minimum-level","Debug" }, { "write-to:File.path",@"C:\Temp\log.txt" }, { "using:File","Serilog.Sinks.File" }, }).CreateLogger(); logger.Information("test"); 作为密钥的前缀。

答案 1 :(得分:1)

我相信这就是你要找的东西

以下是appsettings.json中的serilog配置示例

    {
  "Serilog": {
    "Using":  ["Serilog.Sinks.Literate"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "LiterateConsole" },
      { "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
        "Application": "Sample"
    }
  }
}

<强> startup.cs

var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();

var logger = new LoggerConfiguration()
        .ReadFrom.Configuration(configuration)
        .CreateLogger();

答案 2 :(得分:0)

Parameswar Rao's answer中所述,如果您使用的是ConfigurationBuilder,则需要使用.ReadFrom.Configuration方法来代替。

要扩展asidis's example,您可以看一下我项目中使用的配置。应用程序会将logging节点的内容作为IDictionary<string, string>加载,然后再馈入.ReadFrom.KeyValuePairs

"logging": {
  "minimum-level": "Information",
  "using:Console": "Serilog.Sinks.Console",
  "write-to:Console": "",
  "using:Discord": "CXuesong.Uel.Serilog.Sinks.Discord",
  "write-to:DiscordWebhook.webhookId": "xxxx",
  "write-to:DiscordWebhook.webhookToken": "xxxx"
},

值得注意的几点:

  • KeyValuePairSettings会将配对转换为Dictionary,因此请确保不要重复使用密钥
  • 您需要添加using项,并将程序集名称作为值,然后在其中使用接收器。要减少重复的密钥,请使用using:some_random_text作为密钥名称。
  • write-to条目的完整语法是
"write-to:MethodName[.argumentName]": "argumentValue"

MethodNameloggerConfig.WriteTo.MethodName中的接收器配置扩展方法的名称。 argumentName是方法参数的名称。

如果您没有将任何参数传递给该方法,则只需忽略.argumentName部分。