我只想将调试消息记录到输出窗口,例如 Debug.WriteLine。简单地说 - 通过 serilog 模拟 Debug.WriteLine,因此输出窗口应该只记录调试级别,其他接收器应该忽略它。有可能实现吗?可以通过json配置来实现吗?鉴于以下简单配置,我应该添加什么来实现这一目标:
{
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting": "Information",
"System": "Warning",
"Serilog.AspNetCore": "Warning"
}
},
"Filter": [],
"WriteTo": [
{
"Name": "Debug",
"Args": {
"outputTemplate": "{Timestamp:HH:mm:ss.fff} [{ProcessId}:{ThreadId,-2}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
}
},
{
"Name": "Console",
"Args": {
"restrictedToMinimumLevel": "Information",
"outputTemplate": "{Timestamp:HH:mm:ss.fff} [{ProcessId}:{ThreadId,-2}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
}
}
],
"Enrich": [
"FromLogContext",
"WithExceptionDetails",
"WithDefaultDestructurers",
"WithProcessId",
"WithThreadId",
"WithMachineName",
"WithEnvironmentUserName"
]
}
}
?
提前致谢。
要开始将输出记录到 Serilog,您需要添加类似的内容..
Serilog.Log.Logger.Debug("*************************** Read DailyFile Started *****************************");
要过滤日志,您可以在 LoggerConfiguration() 中提及,也可以在 Appsettings.json 中提及。您可以根据 LogLevel 或 EventType 或任何其他自定义属性过滤日志。
请确保安装了以下软件包。
程序.cs
var configFile = new ConfigurationBuilder().SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.ReadFrom.Configuration(configFile)
.WriteTo.Console()
//.WriteTo.Debug()
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(l => l.Level == LogEventLevel.Debug)
.WriteTo.Debug())
.WriteTo.Logger(lc => lc
.Filter.ByExcluding(l => l.Level == LogEventLevel.Information || l.Level == LogEventLevel.Debug || l.Level == LogEventLevel.Warning || l.Properties["EventType"].Equals("System"))
.WriteTo.File(Directory.GetParent(AppContext.BaseDirectory).FullName + @"\\Logs\\log-Information-.txt", rollingInterval: RollingInterval.Day))
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(l => l.Level == LogEventLevel.Error || l.Level == LogEventLevel.Fatal)
.WriteTo.File(Directory.GetParent(AppContext.BaseDirectory).FullName + @"\\Logs\\log-Error-.txt", rollingInterval: RollingInterval.Day))
.CreateLogger();
Serilog.Log.Logger.Debug("*************************** Read DailyFile Started *****************************");
应用程序设置.json
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer", "Serilog.Sinks.Console", "Serilog.Sinks.Debug", "Serilog.Sinks.File", "Serilog.Enrichers.Environment", "Serilog.Enrichers.Thread", "Serilog.Exceptions", "Serilog.Expressions" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:yyyy:MM:dd hh:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}",
"restrictedToMinimumLevel": "Debug"
}
},
{
"Name": "Debug",
"Args": {
"outputTemplate": "[{Timestamp:yyyy:MM:dd hh:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}",
"restrictedToMinimumLevel": "Debug",
"filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "Level = 'Debug'" //"StartsWith(SourceContext,'Microsoft.EntityFrameworkCore.ChangeTracking')",
}
}
]
}
},
}
VS 上的输出窗口: