在Serilog中,我们可以根据日志记录级别或使用serilog expressions过滤掉事件。
"Serilog": {
"MinimumLevel": {
"Default": "Debug"
},我想知道是否可以根据日志级别过滤掉事件的属性。我们有这样的场景,我们想要记录通信详细信息。在大多数情况下,以ASCII格式通信文本已经足够好了,但有时hex格式可能会有所帮助。我希望只有当日志记录级别为Verbose时,我们才能记录hex格式属性。有可能吗?
Event
{
"ascii": "Hello World
",
"hex": "48 65 6c 6c 6f 20 57 6f 72 6c 64 0d 0a"
}发布于 2021-05-28 04:23:24
您可以通过添加自定义解构策略来转换事件来完成此操作。获取当前日志级别。检测是否启用了Verbose。如果是,则返回一个包含十六进制值的对象。如果不是,则返回一个不包含十六进制值的对象。下面是一个有效的示例:
using System;
using Serilog;
using Serilog.Events;
namespace HelloConsoleCore
{
class MyEventToLog
{
public string SomeText { get; set; }
public string SomeHex { get; set; }
}
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
//.MinimumLevel.Verbose //change your minimum level to see the effect
.MinimumLevel.Debug()
.WriteTo.Console()
.Destructure.ByTransforming((MyEventToLog ev) => {
if (Log.IsEnabled(LogEventLevel.Verbose))
{
return new { ev.SomeHex, ev.SomeText };
}
return new { ev.SomeText };
})
.CreateLogger();
var eventIWantToLog = new MyEventToLog
{
SomeHex = "48 65 6c 6c 6f 20 57 6f 72 6c 64 0d 0a",
SomeText = "Hello World"
};
Log.Information("Let's log an event... {@EventIWantToLog}", eventIWantToLog);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}https://stackoverflow.com/questions/67724305
复制相似问题