【发布时间】:2020-11-03 14:09:02
【问题描述】:
我在 c# 上有这段代码,它做得很好。 来自 CSPConsumersLayer 的每个日志都记录在特定文件 (ConsumerLog.txt) 上,同时,所有其他日志都记录在另一个文件 (Log.txt) 上。 这是我想在 appsettings.json 中实现的 C# 配置
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(Matching.FromSource(nameof(CSPConsumersLayer))).WriteTo.File(@"..\Logs\ConsumerLog.txt", LogEventLevel.Information, "{Timestamp:G} [{Level}] {ThreadId} {MachineName} {Message} {Exception}{NewLine}", rollOnFileSizeLimit: true, fileSizeLimitBytes: 104857600))
.WriteTo.Logger(lg => lg.Filter.ByExcluding(Matching.FromSource(nameof(CSPConsumersLayer))).WriteTo.File(@"..\Logs\Log.txt", LogEventLevel.Information, "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}", rollOnFileSizeLimit: true, fileSizeLimitBytes: 104857600))
.CreateLogger();
当我尝试在 Json 上转换它时它不起作用
--这是我自己弄出来的JSON,不能正常工作。
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "Logger",
"Args": {
"configureLogger": {
"Filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "StartsWith(SourceContext, 'CSPConsumersLayer')"
}
}
],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "../Logs/ConsumerLog.log",
"outputTemplate": "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}",
"rollOnFileSizeLimit": "true",
"fileSizeLimitBytes": 104857600
}
}
]
}
}
},
{
"Name": "Logger",
"Args": {
"configureLogger": {
"Filter": [
{
"Name": "ByExcluding",
"Args": {
"expression": "StartsWith(SourceContext, 'CSPConsumersLayer')"
}
}
],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "../Logs/Log.log",
"outputTemplate": "{Timestamp:G} [{Level}] {User} {IP} {ThreadId} {MachineName} {SourceContext} {RequestId} {Message} {Exception}{NewLine}",
"rollOnFileSizeLimit": "true",
"fileSizeLimitBytes": 104857600
}
}
]
}
}
}
],
"Enrich": [
"FromLogContext",
"WithMachineName"
]
}
【问题讨论】:
-
您能否详细描述一下“它不能正常工作”。如果过滤不适合您,也可以尝试使用 `"expression": "FromSource(CSPConsumersLayer)"。
-
感谢您的回复。问题是我没有包含“serilog-extensions-logging”数据包,所以它无法理解过滤器表达式。无论如何,最适合我需要的表达式是“Contains(SourceContext, 'CSPConsumersLayer')”。
-
...听起来你需要自己回答;)
标签: logging configuration serilog