读取serilog的appconfig文件

时间:2019-03-20 02:29:34

标签: c# serilog

我有Logger.cs类,正在按以下方式初始化serilog设置:

_logger = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .MinimumLevel.Debug()
                .WriteTo.File(_filepath, restrictedToMinimumLevel: LogEventLevel.Debug, shared: true, rollOnFileSizeLimit: true)
                .CreateLogger();

我想从app.config文件中读取文件的大小。 我有如下的app.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="serilog:using:File" value="Serilog.Sinks.File" />
    <add key="serilog:write-to:File.fileSizeLimitBytes" value="2000" />
  </appSettings>
</configuration>

但是看起来appsettings根本没有被读取。因为我可以看到生成了超过2kb的文件。 我在这里错过了什么?

我的记录器类如何从app.config文件中读取,是否错过了assemblyinfo类中的任何设置?

2 个答案:

答案 0 :(得分:0)

通过App.config的Serilog配置不会与您通过C#代码定义的配置“合并” ...这些是可加的。这意味着,在您的示例中,您正在配置两个独立的接收器,它们都正在写入文件。

但是,由于您没有在App.config中指定接收器的文件路径,因此它将忽略该接收器而不是对其进行配置,并且仅配置了第二个接收器(在C#代码中)。

如果您想使用App.config配置,那么您的XML除了fileSizeLimitBytes之外,还应包括文件路径:

<configuration>
  <appSettings>
    <add key="serilog:minimum-level" value="Debug"/>
    <add key="serilog:using:File" value="Serilog.Sinks.File" />
    <add key="serilog:write-to:File.path" value="log.txt" />
    <add key="serilog:write-to:File.rollOnFileSizeLimit" value="true" />
    <add key="serilog:write-to:File.fileSizeLimitBytes" value="2000" />
  </appSettings>
</configuration>

您的C#代码只需从App.config中读取设置,而无需“额外”接收器。

_logger = new LoggerConfiguration()
    .ReadFrom.AppSettings()
    .CreateLogger();

ps:请注意,我还通过App.config配置了MinimumLevel。这不是必需的,但是如果已经通过App.config配置了Serilog接收器,通常就有意义。

答案 1 :(得分:-1)

  

您可以混合并匹配基于XML和基于代码的配置,但是每个接收器   必须使用XML或在代码中添加的代码接收器中进行配置   无法通过应用设置进行修改。

因此,如果您需要使用App.config文件,则需要将所有配置移至该文件,如下所示

<appSettings>
  <add key="serilog:minimum-level" value="Debug"/>
  <add key="serilog:using:File" value="Serilog.Sinks.File" />
  <add key="serilog:write-to:File.path" value="logs\log.txt" />
  <add key="serilog:write-to:File.shared" value="true" />
  <add key="serilog:write-to:File.rollOnFileSizeLimit" value="true" />
  <add key="serilog:write-to:File.fileSizeLimitBytes" value="2000" />
</appSettings>

并使用以下代码创建记录器实例

_logger = new LoggerConfiguration()
    .ReadFrom.AppSettings()
    .CreateLogger();