是否可以根据日志记录级别过滤掉 serilog 事件的属性
Is it possible to filter out properties of serilog events based on the logging level
在 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"
}
您可以通过添加自定义解构策略来转换事件来实现此目的。获取当前日志级别。检测是否启用了 Verbose。如果是,则您 return 一个包含十六进制值的对象。如果不是,则您 return 一个不包含十六进制值的对象。这是一个工作示例:
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();
}
}
}
在 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"
}
您可以通过添加自定义解构策略来转换事件来实现此目的。获取当前日志级别。检测是否启用了 Verbose。如果是,则您 return 一个包含十六进制值的对象。如果不是,则您 return 一个不包含十六进制值的对象。这是一个工作示例:
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();
}
}
}