目前,我启用 Serilog 来记录向我的服务器发出的所有 HTTP 请求(请参阅下面的 Program.cs 和logging.json)。
但是,Openshift 正在调用 /ready 和 /live,我不想记录这些请求
{"@t":"2020-12-17T15:02:08.7321442Z","@m":"HTTP \"GET\" \"/ready\" responded 200 in 41.3777 ms","@i":"62d0885c","RequestMethod":"GET","RequestPath":"/ready","StatusCode":200,"Elapsed":41.3777,"SourceContext":"Serilog.AspNetCore.RequestLoggingMiddleware","RequestId":"0HM52JISL6NBA:00000001","SpanId":"|d7e25f1-47c5ac680b1d5fd1.","TraceId":"d7e25f1-47c5ac680b1d5fd1","ParentId":"","ConnectionId":"0HM52JISL6NBA"}
Run Code Online (Sandbox Code Playgroud)
问题是我仍然想记录其他请求......
有人可以向我解释一下我可以在哪里挂钩这个逻辑吗?
程序.cs
class Program
{
static async Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(provider: ConfigMapFileProvider.FromRelativePath("conf"), path: "logging.json", optional: false, reloadOnChange: true)
.Build()
)
.Enrich.FromLogContext()
.WriteTo.Console(new RenderedCompactJsonFormatter())
.CreateLogger();
await Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("conf/network.json", optional: false, reloadOnChange: false);
config.AddJsonFile("conf/messagebus.json", optional: false, reloadOnChange: false);
config.AddJsonFile("conf/auth.json", optional: false, reloadOnChange: false);
config.AddJsonFile("conf/appsettings.json", optional: false, reloadOnChange: false);
})
.ConfigureWebHostDefaults(options =>
{
options.UseSerilog();
options.UseKestrel();
options.UseStartup<Startup>();
})
.RunConsoleAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
logging.json 文件:
{
//
// LOGGING
//
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Warning",
"Grpc.AspNetCore": "Warning",
"ProtoBuf.Grpc": "Warning"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Serilog 支持过滤器,您可以应用过滤器来根据每个日志事件的属性有选择地包含或排除记录的事件。
在您的情况下,.Filter.ByExcluding删除特定值的日志条目RequestPath即可解决问题:
using Serilog;
using Serilog.Filters;
// ...
Log.Logger = new LoggerConfiguration()
.Filter.ByExcluding(
Matching.WithProperty<string>("RequestPath", v =>
"/ready".Equals(v, StringComparison.OrdinalIgnoreCase) ||
"/live".Equals(v, StringComparison.OrdinalIgnoreCase)))
.WriteTo.Console()
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
当然,您的日志事件还有其他有趣的属性,例如RequestMethod、 和SourceContext,如果您愿意,您还可以使用这些属性使过滤条件更加具体。
| 归档时间: |
|
| 查看次数: |
3202 次 |
| 最近记录: |