【问题标题】:Display Serilog log in the program's GUI using appsettings.json configuration使用 appsettings.json 配置在程序的 GUI 中显示 Serilog 日志
【发布时间】:2021-01-23 08:40:26
【问题描述】:

引用Is it possible to display Serilog log in the program's GUI? 我有这个解决方案对我来说效果很好,但是我无法使用 appsettings.json 配置使其工作。我有各种变化

  {
    "Name": "Sink",
    "Args": {
      "logEventSink": "$sink"
  }
  

有和没有$。这个类在我的应用程序中,应用程序在 using 语句中。我将不胜感激这方面的指导。

【问题讨论】:

    标签: c# .net serilog


    【解决方案1】:

    首先,您应该创建一个配置扩展方法来创建和配置接收器。因为 Serilog 配置阅读器会寻找接受 LoggerSinkConfiguration 作为第一个参数的扩展方法:

    public static class InMemorySinkConfigurationExtensions
    {
        public static LoggerConfiguration InMemory(
                  this LoggerSinkConfiguration loggerConfiguration)
        {
            return loggerConfiguration.Sink(new InMemorySink());
        }
    }
    

    下一步 - 将声明此方法的程序集添加到 Serilog 配置的 Using 部分:

    {
      "Serilog": {
        "Using": [ "NameOfYourAssembly" ],
        // etc
    }
    

    最后,您可以添加接收器配置:

    {
      "Serilog": {
        "Using": [ "NameOfYourAssembly" ],
        "MinimumLevel": {
          "Default": "Debug"
        },
        "WriteTo": [
          {
            "Name": "Console"
          },
          {
            "Name": "InMemory", // should match name of extension method
            "Args": {
               // put here arguments for confuguration extension method
            }
          }
        ]
      }
    }
    

    另外,请记住,InMemorySink 的上述实现不适用于配置文件,因为您没有对此接收器实例的引用。解决此问题的一种肮脏方法是将Events 队列设为静态。否则使用接收器参数来指定通信设置。

    【讨论】:

    • 感谢您的回复。最后声明 InMemorySink 不能与配置文件一起使用。如果我理解正确,那么您的其余答案不适用于此特定情况。事实上,我尝试了这个和许多变化,但没有成功。在这种情况下,您还声明使用接收器参数来指定通信设置。你是说有办法让这个工作吗?如果是这样,您能否详细说明如何使用通信设置来完成这项工作?再次感谢。
    • @azpc 这是您应该用于使用 appsettings 文件配置自定义接收器的确切代码。另一个问题是您正在使用的InMemorySink 实现。那个不好。如果你想使用它,请将事件设为静态
    • 感谢您的回复,但是我仍然想知道我正在尝试做的事情是否可行以及如何使其发挥作用。我尝试了我认为您的指导以及它的许多变体,但我仍然无法使其发挥作用。只要从应用程序本身中读取配置,接收器就可以在文本框中的 Windows 窗体应用程序中很好地工作。但是,从 appsettings.json 读取配置时,它永远不会挂起。
    • @azpc 抱歉,我不明白你的问题是什么。只要按照答案 - 它的工作原理
    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多