Serilog.Sinks.Logz.Io 7.2.0
dotnet add package Serilog.Sinks.Logz.Io --version 7.2.0
NuGet\Install-Package Serilog.Sinks.Logz.Io -Version 7.2.0
<PackageReference Include="Serilog.Sinks.Logz.Io" Version="7.2.0" />
paket add Serilog.Sinks.Logz.Io --version 7.2.0
#r "nuget: Serilog.Sinks.Logz.Io, 7.2.0"
// Install Serilog.Sinks.Logz.Io as a Cake Addin #addin nuget:?package=Serilog.Sinks.Logz.Io&version=7.2.0 // Install Serilog.Sinks.Logz.Io as a Cake Tool #tool nuget:?package=Serilog.Sinks.Logz.Io&version=7.2.0
使用 HTTP 将日志事件发送到 logz.io 的 Serilog 接收器
可用包
Serilog.Sinks.Logz.Io
包 - Serilog.Sinks.Logz.Io | 平台 - NET7.0, NET 6.0, .NET Standard 2.0, .NET 4.6.1
警告:破坏性变更
v7 有破坏性变更。
- 默认字段名称格式设置可能根据您的配置而更改,请再次检查
- batchPostingLimit 字段重命名为 logEventsInBatchLimit 以匹配 Serilog.Sinks.Http 库
- bufferPathFormat 重命名为 bufferBaseFileName
- 此外,滚动间隔现在设置为单独的属性:bufferRollingInterval
因此现在需要执行以下操作:
"bufferPathFormat": "Buffer-{Hour}.json",
需要将配置文件更改为:
"bufferBaseFileName": "Buffer",
"bufferRollingInterval": "Hour",
- 数据中心配置已移动到单独的对象
因此现在需要执行以下操作:
"useHttps": true,
"dataCenterSubDomain": "listener",
"port": null
需要将配置文件更改为:
"dataCenter": {
"useHttps": true,
"dataCenterSubDomain": "listener",
"port": null
}
有关更多信息,请参阅:https://github.com/FantasticFiasco/serilog-sinks-http/releases/tag/v8.0.0
安装
如果您想将HTTP受体添加到您的项目中,您可以直接从NuGet 安装它。
为了安装受体,请在包管理控制台中运行以下命令
PM> Install-Package Serilog.Sinks.Logz.Io
Serilog.Sinks.Http.LogzIo
这个包已被弃用,因为它是一个遗留包并且不再得到维护。请升级到Serilog.Sinks.Logz.Io。最新版本包含完全相同的功能和扩展方法来配置记录器。
用法
在以下示例中,受体将通过HTTP将日志事件POST到https://listener-eu.logz.io:8071/?type=appétoken=<token>
。我们使用命名参数而不是位置参数来配置受体,因为我们发现大多数破坏性更改都是由于描述新功能的参数引起的。使用命名参数意味着在没有代码更改的情况下迁移到新的大版本的可能性更高。
与Serilog.Settings.Configuration一起使用时,该受体可以按以下方式进行配置
{
"Serilog": {
"MinimumLevel": "Warning",
"WriteTo": [
{
"Name": "LogzIoDurableHttp",
"Args": {
"requestUri": "https://listener-eu.logz.io:8071/?type=app&token=<token>"
}
}
]
}
}
该受体将被配置为耐久型,即日志事件将在发送到网络之前持久化到磁盘,从而在系统或进程重启后保护数据不丢失。有关更多信息,请参阅wiki。
内部实现
库依赖于一个精彩的Serilog.Sinks.Http包,它允许创建缓冲文件和控制HTTP上传。
在这里,我们使用DurableHttpUsingTimeRolledBuffers扩展方法来配置耐久HTTP受体。
参见:DurableHttpUsingTimeRolledBuffers
Wiki:耐久时间滚动HTTP受体
序列化器
库使用Newtonsoft.Json包进行序列化。但是,可以通过使用LogzIoSerializer.Instance属性来更改/配置序列化行为。此实例应在应用程序启动时配置(最好是Serilog配置之前)。
默认行为,自动设置
LogzIoSerializer.Instance = new LogzIoSerializer(LogzIoTextFormatterFieldNaming.CamelCase, false);
您也可以使用以下代码设置自定义JsonSerializerSettings
LogzIoSerializer.Instance.WithSerializerSettings(customSetttings);
当然,您可以通过实现ILogzIoSerializer接口并配置自己的实现来完全覆盖序列化逻辑。
多播委托
用于序列化日志条目的Newtonsoft.Json包还能够在日志中序列化lamdbas、委托和类似的功能结构,这通常没有意义。它还可能产生包含程序集信息的大型blob,从而将日志条目的大小增加到不可接受的大小。
为了解决此问题,我们使用自定义JsonConverter覆盖了MulticastDelegate类型序列化。
如果您仍然想要启用此行为,您可以在应用程序启动时使用以下代码配置包序列化器
LogzIoSerializer.Instance = new LogzIoSerializer(LogzIoTextFormatterFieldNaming.CamelCase, false);
更多高级示例
注意:以下示例中仅需要
requestUri
。所有其他属性都表示默认值。
{
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft.AspNetCore": "Debug"
}
},
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"WriteTo": [
{
"Name": "LogzIoDurableHttp",
"Args": {
"requestUri": "https://listener-eu.logz.io:8071/?type=app&token=<token>",
"bufferBaseFileName": "Buffer",
"bufferRollingInterval": "Day",
"bufferFileSizeLimitBytes": "104857600",
"bufferFileShared": false,
"retainedBufferFileCountLimit": 31,
"logEventsInBatchLimit": 1000,
"period": null,
"restrictedToMinimumLevel": "Minimum",
"logzioTextFormatterOptions": {
"BoostProperties": true,
"LowercaseLevel": true,
"IncludeMessageTemplate": true,
"FieldNaming": "CamelCase",
"EventSizeLimitBytes": 261120
}
}
}
]
}
}
在上面的示例中,logzIo格式器选项是默认的,如果符合您的需求,则无需指定这些。
- BoostProperties:当为true时,不添加'properties'前缀。
- LowercaseLevel:将此设置为true以便将日志级别 pushed为小写。
- IncludeMessageTemplate:当为true时,日志消息模板包含在日志中。
- FieldNaming:允许转换字段名称,可能的值:null(默认),CamelCase,LowerCase
从代码中配置
configuration
.WriteTo.LogzIoDurableHttp(
"https://listener-eu.logz.io:8071/?type=app&token=<token>",
logzioTextFormatterOptions: new LogzioTextFormatterOptions
{
BoostProperties = true,
LowercaseLevel = true,
IncludeMessageTemplate = true,
FieldNaming = LogzIoTextFormatterFieldNaming.CamelCase,
EventSizeLimitBytes = 261120,
})
.MinimumLevel.Verbose();
没有缓存的文件日志
注意:强烈建议使用耐久记录器。它更健壮,并且可以容忍各种网络问题,因此您的日志不会丢失。
在以下示例中,受体将通过HTTPS将日志事件POST到https://listener.logz.io。
ILogger log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.LogzIo("<logzio token>", "<log type>", useHttps: true)
.CreateLogger();
log.Information("Logging {@Heartbeat} from {Computer}", heartbeat, computer);
还提供了更高级的配置
ILogger log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.LogzIo("<logzio token>", "<log type>",
new LogzioOptions
{
RestrictedToMinimumLevel = LogEventLevel.Debug,
Period = TimeSpan.FromSeconds(15),
LogEventsInBatchLimit = 50
})
.CreateLogger();
或者可以在您的 appsettings.json
文件中进行配置
{
"Serilog": {
"MinimumLevel": {
"Default": "Verbose"
},
"WriteTo": [
{
"Name": "LogzIo",
"Args": {
"authToken": "<logzio token>",
"type": "<log type>",
"dataCenterSubDomain": "listener",
"dataCenter": {
"subDomain": "listener",
"useHttps": true
},
"logEventsInBatchLimit": 5000,
"period": "00:00:02",
"restrictedToMinimumLevel": "Debug",
"lowercaseLevel": false,
"environment": "",
"serviceName": ""
}
}
]
}
}
支持 Elastic Common Schema
更多细节请查看: https://elastic.ac.cn/guide/en/ecs/current/ecs-reference.html
ILogger log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.LogzIo(new LogzioEcsOptions
{
Type = "<log type>",
AuthToken = "<logzio token>",
DataCenter = new LogzioDataCenter
{
SubDomain = "listener",
Port = 8701,
UseHttps = true
}
},
batchPostingLimit: 50,
period: TimeSpan.FromSeconds(15),
restrictedToMinimumLevel: LogEventLevel.Debug
)
.CreateLogger();
或者可以在您的 appsettings.json
文件中进行配置,请注意 CustomEcsTextFormatterConfiguration 设置是可选的
{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.Logz.Io"
],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Information",
"System": "Warning"
}
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "LogzIoEcs",
"Args": {
"options": {
"type": "<log type>",
"authToken": "<logzio token>"
},
"logEventsInBatchLimit": 30,
"period": "00:00:02",
"restrictedToMinimumLevel": "Debug",
"formatterConfiguration": "Serilog.Sinks.Logz.Io.AspNetCoreApi.Logging.CustomEcsTextFormatterConfiguration, Serilog.Sinks.Logz.Io.AspNetCoreApi"
}
}
]
}
}
产品 | 版本 兼容的以及其他计算后的目标框架版本。 |
---|---|
.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 已计算。 |
-
.NETFramework 4.6.1
- Elastic.CommonSchema.Serilog (>= 1.5.3)
- Newtonsoft.Json (>= 13.0.2)
- Serilog.Sinks.Http (>= 8.0.0)
- Serilog.Sinks.PeriodicBatching (>= 3.1.0)
-
.NETStandard 2.0
- Elastic.CommonSchema.Serilog (>= 1.5.3)
- Newtonsoft.Json (>= 13.0.2)
- Serilog.Sinks.Http (>= 8.0.0)
- Serilog.Sinks.PeriodicBatching (>= 3.1.0)
-
net6.0
- Elastic.CommonSchema.Serilog (>= 1.5.3)
- Newtonsoft.Json (>= 13.0.2)
- Serilog.Sinks.Http (>= 8.0.0)
- Serilog.Sinks.PeriodicBatching (>= 3.1.0)
-
net7.0
- Elastic.CommonSchema.Serilog (>= 1.5.3)
- Newtonsoft.Json (>= 13.0.2)
- Serilog.Sinks.Http (>= 8.0.0)
- Serilog.Sinks.PeriodicBatching (>= 3.1.0)
NuGet 包 (2)
显示依赖于 Serilog.Sinks.Logz.Io 的前 2 个 NuGet 包
包 | 下载 |
---|---|
AlbaLogger
包描述 |
|
AllbatrossLogger
包描述 |
GitHub 仓库
此包未用于任何流行的 GitHub 仓库。
版本 | 下载 | 最后更新 |
---|---|---|
7.2.0 | 283,434 | 12/12/2022 |
7.1.0 | 57,218 | 10/12/2022 |
7.0.0 | 4,941 | 10/12/2022 |
6.0.0 | 531,940 | 11/14/2021 |
5.1.0 | 22,773 | 10/2/2021 |
5.0.0 | 22,057 | 9/25/2021 |
3.0.1 | 89,699 | 2/9/2021 |
3.0.0 | 730 | 2/9/2021 |
2.3.0 | 91,519 | 10/30/2020 |
2.2.3 | 10,510 | 10/1/2020 |
2.2.2 | 80,546 | 4/16/2020 |
2.2.1 | 92,497 | 12/26/2018 |
2.2.0 | 2,532 | 12/20/2018 |
2.1.2 | 1,209 | 12/17/2018 |
2.1.1 | 4,326 | 10/17/2018 |
2.1.1-alpha.1 | 454 | 10/16/2018 |
2.1.0 | 887 | 10/10/2018 |
2.0.0 | 5,742 | 5/21/2018 |
1.2.4 | 1,163 | 5/16/2018 |
1.2.3 | 3,100 | 3/15/2018 |
1.2.2 | 1,075 | 3/13/2018 |
1.1.1 | 2,363 | 3/4/2018 |
1.1.0 | 1,043 | 3/4/2018 |
1.0.0 | 1,184 | 3/1/2018 |
升级依赖项