Serilog.Formatting.Compact 3.0.0

前缀已保留
dotnet add package Serilog.Formatting.Compact --version 3.0.0                
NuGet\Install-Package Serilog.Formatting.Compact -Version 3.0.0                
此命令旨在在 Visual Studio 的“包管理器控制台”中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add Serilog.Formatting.Compact --version 3.0.0                
#r "nuget: Serilog.Formatting.Compact, 3.0.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中,以引用该包。
// Install Serilog.Formatting.Compact as a Cake Addin
#addin nuget:?package=Serilog.Formatting.Compact&version=3.0.0

// Install Serilog.Formatting.Compact as a Cake Tool
#tool nuget:?package=Serilog.Formatting.Compact&version=3.0.0                

Serilog.Formatting.Compact 构建状态 NuGet

为 Serilog 提供一个简单、紧凑的基于 JSON 的事件格式。与 Serilog 的默认 JsonFormatter 相比,CompactJsonFormatter 显著减少了小型日志事件的字节数,同时仍然可读。它通过较短的内置属性名称、更精简的格式以及排除冗余信息来实现这一点。

示例

一个简单的 Hello, {User} 事件。

{"@t":"2016-06-07T03:44:57.8532799Z","@mt":"Hello, {User}","User":"nblumhardt"}

入门

NuGet 安装

dotnet add package Serilog.Formatting.Compact

该格式化器与接受 ITextFormatter 的接收器一起使用。例如,文件 接收器

Log.Logger = new LoggerConfiguration()
  .WriteTo.File(new CompactJsonFormatter(), "./logs/myapp.json")
  .CreateLogger();
XML <appSettings> 配置

要在 XML <appSettings> 中指定格式化器,提供其程序集限定类型名

<appSettings>
  <add key="serilog:using:File" value="Serilog.Sinks.File" />
  <add key="serilog:write-to:File.path" value="./logs/myapp.json" />
  <add key="serilog:write-to:File.formatter"
       value="Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact" />
JSON appsettings.json 配置

要在 appsettings.json 中指定格式化器,提供其程序集限定类型名

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "./logs/myapp.json",
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
        }
      }
    ]
  }
}

渲染的事件

CompactJsonFormatter 保留消息模板、属性和格式化信息,以便稍后创建渲染的消息。当 JSON 专为在无法渲染消息模板的环境中消费而设计时,可以使用 RenderedCompactJsonFormatter

与消息模板不同,RenderedCompactJsonFormatter 会将完全渲染的消息以及从消息模板生成的 事件 ID 写入事件中,该事件 ID 可在 此处生成

{"@t":"2016-06-07T03:44:57.8532799Z","@m":"Hello, \"nblumhardt\"","@i":"7a8b9c0d","User":"nblumhardt"}

格式细节

紧凑格式化器写入的格式是通用的,以便在需要的情况下实现其他日志记录库的实现,包括 Microsoft.Extensions.Logging

有效负载

每个事件都是一个包含事件数据的顶级 JSON 对象。有效负载对象上的任何 JSON 属性都假定为事件的常规属性,除了下面的具体属性之外。

具体属性

该格式定义了几个具有特殊意义的具体属性

属性 名称 描述 必需?
@t 时间戳 ISO 8601 时间戳
@m 消息 描述事件的完全渲染的消息
@mt 消息模板 消息的替代方案;指定在事件的属性的消息模板,以提供渲染为事件文本描述的能力
@l 级别 特定的实现级别标识符(字符串或数字) 缺失意味着“信息”
@x 异常 包含回溯的语言相关错误表示
@i 事件 ID 特定的实现事件 ID(字符串或数字)
@r 渲染 如果 @mt 包含编程语言特定的格式令牌,则为每个此类令牌提供预渲染值的数组 可能省略;如果存在,渲染次数必须与格式化令牌的次数完全匹配
@tr 跟踪 ID 事件创建时处于活动状态的跟踪 ID(如果有)
@sp 跨度 ID 事件创建时处于活动状态的跨度 ID(如果有)

要使用户属性名称的开头具有转义符号 `@`,请重复它,例如 @@name 表示名为 @name 的属性。

批量格式

当事件批量到一个单个的有效负载时,需要一个以换行符分隔的 JSON 文档流。可以使用 \n\r\n 分隔符。使用新行分隔的紧凑 JSON 事件批可以使用的(非官方)MIME 类型是 application/vnd.serilog.clef

版本化

版本化只能是增量版本,没有版本标识符;实现应将任何未识别的具体属性视为用户数据。

比较

下面的输出和基准比较紧凑 JSON 格式化器与 Serilog 内置的 JsonFormatter

事件

Log.Information("Hello, {@User}, {N:x8} at {Now}",
  new
  {
    Name = "nblumhardt",
    Tags = new[] { 1, 2, 3 }
  },
  123,
  DateTime.Now);

默认 JsonFormatter 292 字节

{"Timestamp":"2016-06-07T13:44:57.8532799+10:00","Level":"Information","MessageT
emplate":"Hello, {@User}, {N:x8} at {Now}","Properties":{"User":{"Name":"nblumha
rdt","Tags":[1,2,3]},"N":123,"Now":"2016-06-07T13:44:57.8532799+10:00"},"Renderi
ngs":{"N":[{"Format":"x8","Rendering":"0000007b"}]}}

CompactJsonFormatter 187 字节(0.64)

{"@t":"2016-06-07T03:44:57.8532799Z","@mt":"Hello, {@User}, {N:x8} at {Now}","@r
":["0000007b"],"User":{"Name":"nblumhardt","Tags":[1,2,3]},"N":123,"Now":2016-06
-07T13:44:57.8532799+10:00}

格式化基准

请参阅 test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs

格式化器 中位数 标准差 缩放
JsonFormatter 11.2775 µs 0.0682 µs 1.00
紧凑型JsonFormatter 6.0315 µs 0.0429 µs 0.53
JsonFormatter(renderMessage: true) 13.7585 µs 0.1194 µs 1.22
渲染紧凑型JsonFormatter 7.0680 µs 0.0605 µs 0.63

工具

有几种工具可用于处理CLEF格式。

自定义输出

Serilog.Formatting.Compact 不打算提供可自定义的格式化工具。请参阅此博客文章以获取全面的Serilog JSON输出自定义示例。

产品 兼容以及额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 兼容。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (210)

显示依赖于 Serilog.Formatting.Compact 的前 5 个 NuGet 包

下载
Serilog.AspNetCore

Serilog 支持 ASP.NET Core 日志记录

Serilog.Sinks.Elasticsearch

Serilog 的 Elasticsearch 沉甸甸

Serilog.Extensions.Logging.File

使用一行代码将文件记录添加到 ASP.NET Core 应用

Umbraco.Cms.Infrastructure

包含运行 Umbraco CMS 所需的基础设施组件

UmbracoCms.Core

包含运行 Umbraco Cms 所需的核心组件。此包仅包含组件,可用于包开发。使用 UmbracoCms 包在 Visual Studio 中将 Umbraco 设置为 ASP.NET 项目。

GitHub 仓库 (51)

显示依赖Serilog.Formatting.Compact的前5个最受欢迎的GitHub仓库

仓库 星标
microsoft/reverse-proxy
一个用于开发高性能HTTP反向代理应用程序的工具包。
fullstackhero/dotnet-starter-kit
生产级别的云就绪.NET 8入门套件(Web API + Blazor客户端),支持多租户,具有整洁/模块化架构,可节省大约200+开发小时数!所有功能一应俱全。
umbraco/Umbraco-CMS
Umbraco是一个免费开源的.NET内容管理系统,帮助您提供愉悦的数字体验。
BililiveRecorder/BililiveRecorder
录播姬 | mikufans 生放送录制
fullstackhero/blazor-starter-kit
使用MudBlazor组件构建的Blazor WebAssembly清洁架构模板。
版本 下载 最后更新
3.0.0 644,004 6/9/2024
3.0.0-dev-00980 101 6/9/2024
2.0.1-dev-00969 13,492 2/5/2024
2.0.0 29,152,496 11/9/2023
2.0.0-dev-00962 647 11/9/2023
2.0.0-dev-00961 77,302 10/4/2023
1.1.1-dev-00944 485,923 5/11/2021
1.1.1-dev-00940 128,423 3/6/2020
1.1.1-dev-00939 6,888 3/6/2020
1.1.0 278,758,847 10/17/2019
1.1.0-dev-00934 1,495 10/17/2019
1.0.1-dev-00933 4,093 10/6/2019
1.0.1-dev-00929 1,614 10/5/2019
1.0.1-dev-00925 106,804 1/24/2019
1.0.1-dev-00922 366,362 10/23/2016
1.0.1-dev-00920 2,835 8/29/2016
1.0.0 128,255,967 7/5/2016
1.0.0-rc-916 2,051 6/26/2016
1.0.0-rc-915 1,924 6/26/2016
1.0.0-rc-912 2,014 6/25/2016
1.0.0-rc-9 2,005 6/22/2016
1.0.0-rc-6 1,957 6/21/2016
1.0.0-rc-5 1,971 6/21/2016
1.0.0-rc-3 1,897 6/21/2016
1.0.0-rc-10 1,903 6/22/2016