读取 serilog 的 appconfig 文件
reading appconfig file for serilog
我有 Logger.cs
class 初始化 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 的文件。
我在这里错过了什么?
我的记录器 class 如何从 app.config
文件中读取,我是否遗漏了 assemblyinfo class 中的任何设置?
通过 App.config
的 Serilog 配置与您通过 C# 代码定义的配置不 "merge"...这些是附加的。这意味着,在您的示例中,您正在配置两个独立的接收器,它们都在写入文件。
但是,因为您没有在 App.config 中指定接收器的文件路径,所以它忽略了那个接收器并且没有配置它,并且只配置了第二个接收器(在 C# 代码中)。
如果您想使用 App.config 配置,那么除了 fileSizeLimitBytes
:
之外,您的 XML 还应该包含一个文件路径
<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 读取设置,而无需 "extra" 接收器。
_logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
ps:请注意,我还通过 App.config 配置了 MinimumLevel
。这不是必需的,但如果已经通过 App.config.
配置 Serilog 接收器,通常是有意义的
You can mix and match XML and code-based configuration, but each sink
must be configured either using XML or in code-sinks added in code
can't be modified via app settings.
因此,如果您需要使用 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();
我有 Logger.cs
class 初始化 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 的文件。
我在这里错过了什么?
我的记录器 class 如何从 app.config
文件中读取,我是否遗漏了 assemblyinfo class 中的任何设置?
通过 App.config
的 Serilog 配置与您通过 C# 代码定义的配置不 "merge"...这些是附加的。这意味着,在您的示例中,您正在配置两个独立的接收器,它们都在写入文件。
但是,因为您没有在 App.config 中指定接收器的文件路径,所以它忽略了那个接收器并且没有配置它,并且只配置了第二个接收器(在 C# 代码中)。
如果您想使用 App.config 配置,那么除了 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 读取设置,而无需 "extra" 接收器。
_logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
ps:请注意,我还通过 App.config 配置了 MinimumLevel
。这不是必需的,但如果已经通过 App.config.
You can mix and match XML and code-based configuration, but each sink must be configured either using XML or in code-sinks added in code can't be modified via app settings.
因此,如果您需要使用 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();