如何通过 Serilog 获取日志级别

How to obtain log level through Serilog

提问人:GuyWhoLikesPlums 提问时间:1/9/2022 最后编辑:Prasad TelkikarGuyWhoLikesPlums 更新时间:1/9/2022 访问量:1386

问:

有没有办法获取特定于日志的日志事件级别?例如,如果我登录

Log.Information("This is information")

可以打印出一个值或以某种方式获得日志的级别吗?

C# 日志记录 serilog seq serilog-filter

评论

1赞 Dai 1/9/2022
您尝试在哪里获取 Serilog 事件严重性级别?该方法只是调用 - 您的代码无需拦截其中任何一个。Log.Informationglobal::Serilog.Log.Logger.Information
0赞 GuyWhoLikesPlums 1/9/2022
我尝试只读取日志级别,因此,例如,如果应用程序日志,我希望能够读取日志级别。
0赞 Dai 1/9/2022
“当它通过时”......为什么?我想你误解了日志记录是如何工作的......另外,为什么直接使用 Serilog 而不是通过 MEL?
0赞 GuyWhoLikesPlums 1/9/2022
好的,所以从本质上讲,这里的目标是我想创建一个函数,该函数将根据日志级别是低还是高于/与最低默认级别相同来过滤日志。就目前而言,我对 Serilog 非常陌生,我试图了解它作为将军是如何工作的。
0赞 Dai 1/9/2022
为此,请使用 的 或 和其他过滤器,请参阅此处:github.com/serilog/serilog/wiki/Configuration-BasicsLoggerConfigurationMinimumLevelFilter.ByExcluding(...)

答:

1赞 Luiz Lelis 1/9/2022 #1

也许,您需要的是 Serilog 格式化输出。该功能使您能够根据需要配置日志输出。例如,如果要将级别和消息放在日志中,可以执行以下操作(请记住在项目中添加 Serilog Sinks 依赖项,在本例中为 Console):

using Serilog;

namespace SerilogExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.Console(outputTemplate:
                    "[{Timestamp:HH:mm:ss}] {Level:}: {Message:lj}{NewLine}{Exception}")
                .CreateLogger();

            Log.Information("This is information");
        }
    }
}

上面的示例将打印如下:stdout

[00:30:35] Information: This is information

您还可以将自定义格式化程序用于特定工具引入(例如)。ElasticsearchJsonFormatter

评论

0赞 GuyWhoLikesPlums 1/9/2022
我想我想做的是从日志本身获取日志级别,然后将其与通过配置文件设置的特定应用程序最低日志级别进行比较。我正在通过此路由,因为我不是直接登录到任何特定的接收器,而是登录到过滤掉日志的中间人类型的服务器。
0赞 Luiz Lelis 1/11/2022
您好@GuyWhoLikesPlums,感谢您的回复。您可以遵循两种方法:1 - 直接在应用程序中过滤日志级别(不需要中间件):github.com/serilog/serilog/wiki/...;2 - 如果你想直接在中间件中应用过滤器,你可以配置我上面提到的,例如JSON格式(每个日志将具有相同的格式和字段)。中间件将负责反序列化日志并根据需要对其进行筛选(例如,可以按日志级别进行筛选)。outputTemplate