Serilog.Sinks.Async 2.0.0

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

// Install Serilog.Sinks.Async as a Cake Tool
#tool nuget:?package=Serilog.Sinks.Async&version=2.0.0                

Serilog.Sinks.Async 构建状态 NuGet 加入 https://gitter.im/serilog/serilog 的聊天

其他 Serilog 日志输出的异步包装器。使用此输出支持通过将工作委托给后台线程来减少日志调用开销。这对于受 I/O 瓶颈影响的非批量输出支持,如 FileRollingFile 输出非常适用。

注意:许多基于网络的输出支持(如 CouchDB、Elasticsearch、MongoDB、Seq、Splunk 等)已经本地实现了异步批量处理,并从这个包装器中获得了益处。

入门指南

NuGet 安装

Install-Package Serilog.Sinks.Async

假设您已经安装了目标输出支持,例如文件输出支持,将包装输出支持的配置移动到 WriteTo.Async() 语句中

Log.Logger = new LoggerConfiguration()
    .WriteTo.Async(a => a.File("logs/myapp.log"))
    // Other logger configuration
    .CreateLogger()

Log.Information("This will be written to disk on the worker thread");

// At application shutdown (results in monitors getting StopMonitoring calls)
Log.CloseAndFlush();

在此情况下,包装输出支持(File)将在工作线程上调用,同时您的应用程序线程忙于其他更重要的任务。

由于内存缓冲区可能包含尚未写入目标输出支持的事件,因此当应用程序退出时,重要要调用 Log.CloseAndFlush()Logger.Dispose()

缓冲和丢弃

默认情况下,向工作线程提供养的内存缓冲区限制为 10,000 个项目,然后到达的事件将被丢弃。要增加或减少此限制,请在配置异步输出支持时指定。可以通过 Serilog.Async.IAsyncLogEventSinkInspector.DroppedMessagesCount(请参阅下方的输出状态检查接口)确定是否已丢弃事件。

// Reduce the buffer to 500 events
.WriteTo.Async(a => a.File("logs/myapp.log"), bufferSize: 500)

通过 Monitor 和 Inspector 接口进行健康监控

Async 包装器主要目的是始终允许以最小的日志延迟进行操作,即使写入的输出支持在处理过程中可能暂时阻塞(例如,File 输出支持可能在刷新时阻塞数毫秒)。丢弃行为是一个重要的安全措施;它避免了在日志吞吐量超过输出支持或输出支持摄取吞吐量下降时出现无限制的缓冲行为。

实际上,此配置(假设为一个适当的 bufferSize 提供资源)实现了一个高效且具有弹性的日志配置,可以安全地处理负载而不影响处理吞吐量。当然,风险是缓冲阈值被超过时事件可能被丢弃。通过配置 Async 输出支持时提供的 IAsyncLogEventSinkMonitor 获取的检查接口 IAsyncLogEventSinkInspector,能够激活验证实际缓冲分配是否未超出。

// Example check: log message to an out of band alarm channel if logging is showing signs of getting overwhelmed
void ExecuteAsyncBufferCheck(IAsyncLogEventSinkInspector inspector)
{
    var usagePct = inspector.Count * 100 / inspector.BufferSize;
    if (usagePct > 50) SelfLog.WriteLine("Log buffer exceeded {0:p0} usage (limit: {1})", usagePct, inspector.BufferSize);
}

class MonitorConfiguration : IAsyncLogEventSinkMonitor
{
    public void StartMonitoring(IAsyncLogEventSinkInspector inspector) =>
        HealthMonitor.AddPeriodicCheck(() => ExecuteAsyncBufferCheck(inspector));

    public void StopMonitoring(IAsyncLogEventSinkInspector inspector) 
    { /* reverse of StartMonitoring */ }
}

// Provide monitor so we can wire the health check to the inspector
var monitor = new MonitorConfiguration();
// Use default config (drop events if >10,000 backlog)
.WriteTo.Async(a => a.File("logs/myapp.log"), monitor: monitor) ...

阻塞

警告:由于通常不希望日志异常泄漏到执行路径中,通常也不希望日志记录器具有中断应用程序处理的副作用,直到日志传播被取消阻塞。

当缓冲区大小达到限制时,默认行为是在队列减轻之前丢弃任何进一步的尝试写入,并将每次此类失败报告给 Serilog.Debugging.SelfLog。要将此替换为阻塞行为,请将 blockWhenFull 设置为 true

// Wait for any queued event to be accepted by the `File` log before allowing the calling thread to resume its
// application work after a logging call when there are 10,000 LogEvents awaiting ingestion by the pipeline
.WriteTo.Async(a => a.File("logs/myapp.log"), blockWhenFull: true)

XML <appSettings> 和 JSON 配置

使用 Serilog.Settings.Configuration JSON

{
  "Serilog": {
    "WriteTo": [{
      "Name": "Async",
      "Args": {
        "configure": [{
          "Name": "Console"
        }]
      }
    }]
  }
}

尚未为此包装器添加 XML 配置支持。

关于此输出支持

此容器是在以下对话线程中创建的:https://github.com/serilog/serilog/issues/809

产品 兼容的以及额外的计算目标框架版本。
.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 包 (344)

显示依赖于 Serilog.Sinks.Async 顶部 5 个 NuGet 包

下载
Serilog.Extensions.Logging.File

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

Umbraco.Cms.Infrastructure

包含运行 Umbraco CMS 所需的基础架构程序集。

UmbracoCms.Core

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

SkyAPM.Utilities.Logging

Microsoft.Utilities.Logging 对 SkyAPM 的支持。

CG.SharedEntities

包描述

GitHub 仓库 (88)

显示依赖 Serilog.Sinks.Async 的前 5 个最受欢迎的 GitHub 仓库。

仓库 星标
jellyfin/jellyfin
免费软件媒体系统
netchx/netch
一个简单的代理客户端
abpframework/abp
开源的 ASP.NET Core 网络应用程序框架!提供了一种有见地的架构,使用最佳实践在 .NET 上构建企业软件解决方案。提供基本基础设施、横切关注点实现、启动模板、应用模块、UI 主题、工具和文档。
felixse/FluentTerminal
基于 UWP 和 Web 技术的终端仿真器。
EventStore/EventStore
EventStoreDB,事件原生数据库。专为事件归约、事件驱动和微服务架构设计。
版本 下载 最后更新
2.0.0 825,044 6/6/2024
2.0.0-dev-00091 107 6/6/2024
1.5.0 52,522,776 6/25/2021
1.5.0-dev-00080 7,230 6/25/2021
1.4.1-dev-00079 14,811 5/13/2021
1.4.1-dev-00073 181,171 5/7/2020
1.4.1-dev-00071 101,404 11/8/2019
1.4.0 27,444,372 6/9/2019
1.4.0-dev-00067 1,405 6/7/2019
1.3.1-dev-00063 67,609 9/22/2018
1.3.1-dev-00061 6,584 8/8/2018
1.3.0 5,972,336 5/21/2018
1.3.0-dev-00056 1,484 5/18/2018
1.2.0 159,654 5/9/2018
1.2.0-dev-00051 1,519 5/9/2018
1.2.0-dev-00049 1,544 5/9/2018
1.2.0-dev-00048 1,738 4/25/2018
1.2.0-dev-00031 1,682 4/19/2018
1.2.0-dev-00018 56,692 8/7/2017
1.1.1-dev-00013 1,836 6/28/2017
1.1.0 14,635,622 6/26/2017
1.0.2-dev-00008 2,494 2/14/2017
1.0.1 713,083 10/17/2016
1.0.1-dev-00004 4,221 8/11/2016
1.0.1-dev-00001 1,745 8/6/2016