项目是一个wpf 项目,但是使用了dotnetcore 自带的DI组件,因为自带的ILogger 并没有提供输出到文件或者其他介质(seq) 的方式,于是就尝试接入Serilog,作为一个收集器,Serilog具备可配置化,下面就是实战
1. 首先需要安装如下包
Serilog (3.0.1) //主组件包
Serilog.AspNetCore (6.0.1) //提供ILoggingBuilder 的扩展
Serilog.Settings.Configuration (4.0.0-dev-00499) // 映射配置
以下是输出介质相关的包
Serilog.sinks.Console (4.1.0)
Serilog.sinks.File (5.0.0)
Serilog.sinks.Seg (52.3-dev-00262)
2. 使用如下代码,使serilog 读取配置
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
3. 为了使用自带的ILogger ,所以需要注入log,如果不介意使用seriLog 自身的静态方法来写日志,可不注入ILogger ,使用时 直接用 Log.Error()
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddSerilog(); // 使用serilog 替代标准的日志记录器
});
4.配置也是相当简洁
"Serilog": {
"MinimumLevel": {
"Default": "Debug"
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "logs\\plcanalog.log",
"rollingInterval": "Day",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}{Exception}"
}
},
{
"Name": "Seq",
"Args": {
"serverUrl": "http://xxxx",
"apiKey": "xxx",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}{Exception}"
}
}
]
}
总体使用非常丝滑