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

时间:2019-03-18 03:21:49

标签: c# serilog

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

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

请帮助我。仅记录调试,错误和警告日志。

val为启用复选框时为true:

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();
}

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

1 个答案:

答案 0 :(得分:1)

您不能使用MinimumLevel作为@barbsan注释来实现它。

但是您可以使用filtering

  

过滤器只是LogEvent上的谓词

_logger  = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.File(_filepath)
    .Filter.ByIncludingOnly(isNotInfoLevel)
    .CreateLogger();

在下面的功能中,您可以根据需要添加更多条件

private static bool isNotInfoLevel(LogEvent le)
{
    return le.Level != LogEventLevel.Information;
}

使用ByExcluding排除信息级别的另一种方式

.Filter.ByExcluding((le) => le.Level == LogEventLevel.Information)