基于 Microsoft.Extensions.Logging 的 .NET 版零分配文本/结构化日志记录器,具有字符串插值和源生成器。
基于 Microsoft.Extensions.Logging 的 .NET 版零分配文本/结构化日志记录器,具有字符串插值和源生成器。
ZLogger 是一个用于 .NET 和 Unity 的零分配文本/结构化日志记录器,具有字符串插值和源生成器,基于 Microsoft.Extensions.Logging。 日志输出的常见目标是 Console(Stream), File(Stream), Network(Stream), 所有都是以 UTF8 格式。 然而,由于典型的日志记录架构基于字符串(UTF16),这需要额外的编码成本。 在 ZLogger 中,我们利用了 C# 10 的字符串插值改进,并通过利用 .NET 8 的 IUtf8SpanFormattable,我们成功避免了值的装箱,并通过始终直接以 UTF8 格式输出来保持高性能。
ZLogger 直接基于 Microsoft.Extensions.Logging 构建。Microsoft.Extensions.Logging 是一种官方的日志抽象,在许多框架中都有使用,例如 ASP.NET Core 和 Generic Host。然而,由于常规日志记录器有自己的系统,需要一个桥梁来连接这些系统,因此会产生大量的开销。ZLogger 取消了对这种桥梁的需求,从而完全避免了开销。
此基准测试是写入文件,但典型日志记录器的默认设置速度非常慢。这是因为它们每次写入后都会刷新。在基准测试中,为确保公平性,我们特别注意在每个日志记录器中设置选项,以实现最大速度。ZLogger 采用默认设置即可实现最快速度,因此无需担心任何设置。
此默认设置的速度较慢,原因是 I/O 速度较慢,因此可以通过使用更快的驱动器来缓解此问题。在进行基准测试时,请注意,结果不仅在本地(可能速度很快)上,而且在连接到云端的驱动器以及 Docker 等环境中也会有很大差异。异步缓冲设置的一个优点是,它可以减少此类 I/O 问题的影响。ZLogger 专注于 C# 的新语法,并完全采用了插值字符串。这使得提供参数化的代码变得更加容易。
暂无开放 Issues,或尚未同步最近议题。