我有Logger.cs一个类,我正在初始化 serilog 设置,如下所示:
_logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.MinimumLevel.Debug()
.WriteTo.File(_filepath, restrictedToMinimumLevel: LogEventLevel.Debug, shared: true, rollOnFileSizeLimit: true)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我想从 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>
Run Code Online (Sandbox Code Playgroud)
但看起来appsettings根本就没有读过。因为我可以看到生成了超过 2kb 的文件。我在这里错过了什么?
我的记录器类将如何从文件中读取app.config,我是否错过了 assemblyinfo 类中的任何设置?
Serilog 配置App.config不会与您通过 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>
Run Code Online (Sandbox Code Playgroud)
您的 C# 代码只会从 App.config 读取设置,而无需“额外”接收器。
_logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
ps:请注意,我还MinimumLevel通过 App.config 配置了。这不是必需的,但如果已经通过 App.config 配置 Serilog 接收器,通常是有意义的。
| 归档时间: |
|
| 查看次数: |
14360 次 |
| 最近记录: |