如何以非常具体的方式格式化 Serilog JSON 输出

问题描述 投票:0回答:2

我需要将 Serilog json 输出格式化为非常特定的格式的文件。我弄乱了输出模板,但我一定错过了一些简单的东西。输出的示例是:

{ 
    "event.action": "Save",
    "custom.vulnerability": "Save PII",
    "event.action":"Insert",
    "event.module":"Person",
    "message":"Inserted person object by Bob",
    "event.outcome":"Success",
    "host.ip":"192.168.0.0",
    etc...
}

有人对如何实现这种格式有什么建议吗?我有丰富的内容来填充其中许多属性,但生成所需的输出格式是我的问题。谢谢,唐塔

c# serilog
2个回答
4
投票

为了控制 JSON 输出的格式,您需要实现自定义

ITextFormatter
(您决定如何格式化 JSON),并将其提供给发出日志的接收器。

Log.Logger = new LoggerConfiguration()
  .WriteTo.File(new YourCustomJsonFormatter(), "./logs/myapp.json")
  .CreateLogger();

您可以在

Serilog.Formatting.Compact
的源代码中看到自定义ITextFormatter的示例实现。


0
投票

@C。 Augusto Proiete 的答案是正确的,如果从

appsettings.json
文件加载配置,我将添加另一种方法来执行该操作。

环境。设置:

dotnet add package Serilog
dotnet add package Serilog.Settings.Configuration
dotnet add package Serilog.Sinks.File
dotnet add package Serilog.Formatting.Json

首先,创建自定义格式化程序:

using Serilog.Formatting;
using System.IO;
using Newtonsoft.Json;

namespace MyNamespace;

public class CustomJsonFormatter : Serilog.Formatting.ITextFormatter
{
    public void Format(LogEvent logEvent, TextWriter output)
    {
        //Your code here
    }
}

然后准备

appsettings.json
文件:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/log.json",
          "formatter": "MyNamespace.CustomJsonFormatter, MyAssembly"
          "rollingInterval": "Day"
        }
      }
    ],
    "Properties": {
      "Application": "MyApp"
    }
  }
}

如果您选择使用前面提到的

Serilog.Formatting.Compact
,同样适用:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/log.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "rollingInterval": "Day"
        }
      }
    ],
    "Properties": {
      "Application": "MyApp"
    }
  }
}

顺便说一句,使用

Serilog.Formatting.Json.JsonFormatter
,您的日志文件将以逐行 Json 格式数据结尾,您可以使用另一个 C# 项目轻松摄取这些数据并加载所有日志以进行进一步分析。

© www.soinside.com 2019 - 2024. All rights reserved.