我需要将 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...
}
有人对如何实现这种格式有什么建议吗?我有丰富的内容来填充其中许多属性,但生成所需的输出格式是我的问题。谢谢,唐塔
ITextFormatter
(您决定如何格式化 JSON),并将其提供给发出日志的接收器。
Log.Logger = new LoggerConfiguration()
.WriteTo.File(new YourCustomJsonFormatter(), "./logs/myapp.json")
.CreateLogger();
您可以在
Serilog.Formatting.Compact的源代码中看到自定义
ITextFormatter
的示例实现。
@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# 项目轻松摄取这些数据并加载所有日志以进行进一步分析。