我有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类中的任何设置?
答案 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();