serilog 仅记录调试、错误和警告日志,但不记录信息

Rem*_*San 5 c# serilog

我有一个配置了 serilog 进行日志记录的应用程序。我的应用程序中有一个复选框,只有单击该复选框按钮时,它才应记录所有信息日志,否则仅应记录错误和警告日志。

在调试模式下,当未选中按钮时,如何仅记录调试、错误和警告日志。两天以来我一直在尝试这样做。.MinimumLevel.Debug()我已经尝试了 google/stackoverflow 使用/中建议的所有方法,restrictedToMinimumLevel: LogEventLevel.Debug但它对我不起作用。它还记录信息日志。

请帮我解决这个问题。仅记录调试、错误和警告日志。

val当复选框启用时为真:

if (val == "true")
{
    _logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .WriteTo.File(_filepath, restrictedToMinimumLevel: LogEventLevel.Information)
                    .CreateLogger();
}
else if (val == "false")
{
    _logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .WriteTo.File(_filepath, restrictedToMinimumLevel: LogEventLevel.Debug)
                    .CreateLogger();
}
Run Code Online (Sandbox Code Playgroud)

val为 false 时,即当未启用复选框时,它应该仅记录调试、错误和警告日志。

Ela*_*ode 6

MinimumLevel您无法使用@barbsan 评论来实现它。

但您可以根据您的情况使用过滤。

过滤器只是谓词LogEvent

_logger  = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.File(_filepath)
    .Filter.ByIncludingOnly(isNotInfoLevel)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以在下面的函数中添加更多条件

private static bool isNotInfoLevel(LogEvent le)
{
    return le.Level != LogEventLevel.Information;
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用ByExcluding排除信息级别

.Filter.ByExcluding((le) => le.Level == LogEventLevel.Information)
Run Code Online (Sandbox Code Playgroud)