Jam*_*123 2 c# serilog .net-core serilog-exceptions
我正在使用滚动将所有日志写入一个文件。但我想通过Information
,Warning
和Exceptions
滚动文件将它们分开。
我当前的配置是这样的
"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
"pathFormat": "logs\\log-{Hour}.log",
"rollOnFileSizeLimit ": true,
"retainedFileCountLimit ": null,
"rollingInterval": "Hour",
"fileSizeLimitBytes": 5000000
}
}
]
},
Run Code Online (Sandbox Code Playgroud)
班级
public ILogger GetLogger()
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
_logger =
new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
return _logger ;
}
Run Code Online (Sandbox Code Playgroud)
在 Serilog 中,您可以通过子记录器或Serilog.Sinks.Map进行这种分离。
您无法通过配置整个管道appsetting.json
,但可以appsetting.json
使用您选择的自定义键轻松配置每个文件的路径,并在通过代码配置日志管道时使用它。
使用子记录器并对其应用了过滤器的示例:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(c =>
c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
.WriteTo.File("Debug.log"))
.WriteTo.Logger(c =>
c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
.WriteTo.File("Error.log"))
.CreateLogger();
Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");
Log.CloseAndFlush();
Run Code Online (Sandbox Code Playgroud)
使用Serilog.Sinks.Map将每个映射LogEventLevel
到不同文件的示例。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Map(evt => evt.Level, (level, wt) => wt.File($"{level}.log"))
.CreateLogger();
Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");
Log.CloseAndFlush();
Run Code Online (Sandbox Code Playgroud)