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                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package
<PackageReference Include="Serilog.Sinks.Logz.Io" Version="7.2.0" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用该包。
paket add Serilog.Sinks.Logz.Io --version 7.2.0                
#r "nuget: Serilog.Sinks.Logz.Io, 7.2.0"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本的源代码中以引用包。
// 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

NuGet Version NuGet Documentation Join the chat at https://gitter.im/serilog/serilog Help

- 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 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard

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

升级依赖项