如何配置Serilog sink包装器及被包装sink并迁移配置到配置文件
配置迁移方案(优先使用Serilog.Settings.Xml)
首先你需要提前安装所需NuGet依赖:
- Serilog.Settings.Xml
- Serilog.Sinks.File
- Serilog.Sinks.Seq
- 包含
LogLevelModifierSink的对应包(通常为Serilog.Sinks.LogLevelModifier)
然后你可以新建一个xml格式的配置文件(比如命名为Serilog.config),示例配置如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <serilog> <writeTo> <sink name="LogLevelModifierSink"> <writeTo> <sink name="File"> <argument name="path" value="C:\inetpub\logs\serilog.txt" /> <argument name="rollingInterval" value="Day" /> <argument name="shared" value="true" /> <argument name="outputTemplate" value="{Timestamp:HH:mm:ss.fff} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}{NewLine}{ThreadId}" /> </sink> <sink name="Seq"> <argument name="serverUrl" value="http://localhost/seq/" /> </sink> </writeTo> </sink> </writeTo> </serilog> </configuration>
调整完配置文件后,原本的C#代码可以简化为:
Log.Logger = new LoggerConfiguration() .ReadFrom.Xml("Serilog.config") .CreateLogger();
注意:如果配置文件没有放在程序运行目录,需要传入完整的文件路径,同时要把配置文件的「复制到输出目录」属性设置为「如果较新则复制」,避免运行时找不到配置文件。
多sink写入问题说明
早期版本的LogLevelModifierSink确实存在嵌套配置多sink时,仅第一个sink生效的bug,该问题在后续维护版本中已经完成修复。只要你使用的是最新版的对应sink包,同时配置File和Seq两个sink不会有冲突,两个目的地都能正常收到日志。
内容的提问来源于stack exchange,提问作者Phil Friedman
相关产品推荐
相关产品推荐

