【问题标题】:Serilog Range level filteringSerilog 范围级别过滤
【发布时间】:2020-04-08 13:09:26
【问题描述】:

在 log4net 中,您可以选择使用 levelMin levelMax 范围声明不同的 fileappender。 这样,您可以拥有一个用于调试的文件和一个用于错误的文件。 如何在 serilog 文件接收器中具有相同的行为。 我有这个代码,但你只能指定最低级别

Log.Logger = new LoggerConfiguration()
            .WriteTo.Async(a =>
            {
                a.RollingFile($"{AppDomain.CurrentDomain.BaseDirectory}\\Logs\\error.txt", 
                    restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error);
            })
            .WriteTo.Async(a =>
            {
                a.RollingFile($"{AppDomain.CurrentDomain.BaseDirectory}\\Logs\\log.txt",
                    restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug);
            })
            .CreateLogger();

它创建了两个文件,但在 log.txt 中我还看到了错误级别消息

【问题讨论】:

    标签: c# .net .net-core serilog


    【解决方案1】:

    在 Serilog 中,您可以使用 sub-loggers 并对其应用过滤器:

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.Logger(c =>
            c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
                .WriteTo.File("Debug.log"))
        .WriteTo.Logger(c =>
            c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
                .WriteTo.File("Error.log"))
        .CreateLogger();
    
    Log.Debug("This goes to Debug.log only");
    Log.Error("This goes to Error.log only");
    
    Log.CloseAndFlush();
    

    如果您只想将LogEventLevel 映射到文件,也可以使用Serilog.Sinks.Map。

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .WriteTo.Map(evt => evt.Level, (level, wt) => wt.File($"{level}.log"))
        .CreateLogger();
    
    Log.Debug("This goes to Debug.log only");
    Log.Error("This goes to Error.log only");
    
    Log.CloseAndFlush();
    

    【讨论】:

    • 那行不通。信息不会记录在任何地方。
    • @pantonis 如果您在控制台应用程序上运行它,它应该创建两个带有信息的.log 文件...
    • 我使用了第一种方法,但我没有看到任何文件中记录的信息级别
    • 我必须在调试级别添加一个或条件e => e.Level == LogEventLevel.Debug || e.Level == LogEventLevel.Information
    • 过滤器会影响性能吗?我正在写一个实时的关键信息,我想确保 serilog 过滤不会导致任何性能下降
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多