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
<PackageReference Include="Serilog.Sinks.Async" Version="2.0.0" />
paket add Serilog.Sinks.Async --version 2.0.0
#r "nuget: Serilog.Sinks.Async, 2.0.0"
// 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
其他 Serilog 日志输出的异步包装器。使用此输出支持通过将工作委托给后台线程来减少日志调用开销。这对于受 I/O 瓶颈影响的非批量输出支持,如 File 和 RollingFile 输出非常适用。
注意:许多基于网络的输出支持(如 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 已计算。 |
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 |