【问题标题】:How to obtain log level through Serilog如何通过 Serilog 获取日志级别
【发布时间】:2022-01-09 02:10:22
【问题描述】:

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

Log.Information("This is information")

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

【问题讨论】:

  • 在哪里您试图获取 Serilog 事件严重性级别? Log.Information 方法只调用 global::Serilog.Log.Logger.Information - 您的代码无需拦截任何这些。
  • 我正在尝试读取日志级别,例如,如果应用程序记录日志,我希望能够读取日志级别。
  • “当它通过时”...为什么?我认为您误解了日志记录的工作原理......另外,您为什么直接使用 Serilog 而不是通过 MEL?
  • 好吧,这里的主要目标是我想创建一个函数,根据日志级别是低还是高/与最低默认级别相同来过滤日志。我对 Serilog 还很陌生,我正在尝试了解它作为一般的工作原理。
  • 为此,请使用LoggerConfigurationMinimumLevelFilter.ByExcluding(...) 和其他过滤器,请参见此处:github.com/serilog/serilog/wiki/Configuration-Basics

标签: c# logging serilog seq serilog-filter


【解决方案1】:

您可能需要的是Serilog Formatting Output。该功能使您能够根据需要配置日志输出。例如,如果您想在日志中放置级别和消息,您可以执行以下操作(请记住在项目中添加您的 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

您还可以将custom formatters 用于特定的工具摄取(例如ElasticsearchJsonFormatter)。

【讨论】:

  • 我想我要做的是从日志本身获取日志级别,然后将其与通过配置文件设置的特定应用程序最低日志级别进行比较。我正在通过这条路线,因为我没有直接登录到任何特定的接收器,而是登录到过滤掉日志的中间人类型的服务器。
  • 您好@GuyWhoLikesPlums,感谢您的回复。您可以采用两种方法: 1 - 直接在您的应用程序中过滤日志级别(不需要中间件):github.com/serilog/serilog/wiki/…; 2 - 如果您想直接在中间件中应用过滤器,您可以配置outputTemplate,如我上面提到的,例如 JSON 格式(每个日志都将具有相同的格式和字段)。中间件将负责反序列化日志并根据需要过滤它们(例如,您可以按日志级别过滤)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多