Serilog.Enrichers.ClientInfo 2.1.1

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

// Install Serilog.Enrichers.ClientInfo as a Cake Tool
#tool nuget:?package=Serilog.Enrichers.ClientInfo&version=2.1.1                

serilog-enrichers-clientinfo NuGet

使用客户端 IP、关联 ID 和 HTTP 请求头丰富日志。

安装 Serilog.Enrichers.ClientInfo NuGet 包

Install-Package Serilog.Enrichers.ClientInfo

dotnet add package Serilog.Enrichers.ClientInfo

将 enricher 应用于代码中的 LoggerConfiguration

Log.Logger = new LoggerConfiguration()
    .Enrich.WithClientIp()
    .Enrich.WithCorrelationId()
    .Enrich.WithRequestHeader("Header-Name1")
    // ...other configuration...
    .CreateLogger();

appsettings.json 文件中

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "Using":  [ "Serilog.Enrichers.ClientInfo" ],
    "Enrich": [
      "WithClientIp",
      "WithCorrelationId",
      {
          "Name": "WithRequestHeader",
          "Args": { "headerName": "User-Agent"}
      }
    ],
    "WriteTo": [
      { "Name": "Console" }
    ]
  }
}

ClientIp

ClientIp enricher 从 HttpContext.Connection.RemoteIpAddress 读取客户端 IP。由于版本 2.1,出于安全原因,它不再读取 x-forwarded-for 标头。要处理转发标头,配置 ForwardedHeadersOptions。如果您仍然想记录 x-forwarded-for,您可以使用 RequestHeader enricher。

Log.Logger = new LoggerConfiguration()
    .Enrich.WithClientIp()
    ...

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "Using":  [ "Serilog.Enrichers.ClientInfo" ],
    "Enrich": [
      {
        "Name": "WithClientIp"
      }
    ],
  }
}

CorrelationId

对于 CorrelationId enricher,您可以

  • 配置标头名称,默认标头名称为 x-correlation-id
  • 当请求头集合中不存在标头时,设置关联 ID 的值,默认值为 false
Log.Logger = new LoggerConfiguration()
    .Enrich.WithCorrelationId(headerName: "correlation-id", addValueIfHeaderAbsence: true)
    ...

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "Using":  [ "Serilog.Enrichers.ClientInfo" ],
    "Enrich": [
      {
        "Name": "WithCorrelationId",
        "Args": {
          "headerName": "correlation-id"
          "addValueIfHeaderAbsence": true
        }
      }
    ],
  }
}

RequestHeader

您可以使用多个 WithRequestHeader 来记录不同的请求头。 WithRequestHeader 接受两个参数;第一个参数 headerName 是要记录的标头名称,第二个参数是 propertyName,即日志属性名称。

Log.Logger = new LoggerConfiguration()
    .Enrich.WithRequestHeader(headerName: "header-name-1")
    .Enrich.WithRequestHeader(headerName: "header-name-2", propertyName: "SomeHeaderName")
    ...

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "Using":  [ "Serilog.Enrichers.ClientInfo" ],
    "Enrich": [
      {
        "Name": "WithRequestHeader",
        "Args": {
          "headerName": "User-Agent"
        }
      },
      {
        "Name": "WithRequestHeader",
        "Args": {
          "headerName": "Connection"
        }
      },
      {
        "Name": "WithRequestHeader",
        "Args": {
          "headerName": "Content-Length",
          "propertyName": "RequestLength"
        }
      }
    ],
  }
}
注意

要将记录的标头包含在 OutputTemplate 中,如果未设置日志属性名称,应使用不带 - 的标头名称。例如,如果标头名称是 User-Agent,则应使用 UserAgent

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .Enrich.WithRequestHeader("User-Agent")
    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss}] {Level:u3} {UserAgent} {Message:lj}{NewLine}{Exception}")

安装到 ASP.NET Core Web 应用程序中

您需要注册 IHttpContextAccessor 单例,以便富集器可以访问请求的 HttpContext 以提取客户端 IP 和客户端代理。为了让此富集器按预期工作,您的 Startup 类应该包含以下内容。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;

namespace MyWebApp
{
    public class Startup
    {
        public Startup()
        {
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss}] {Level:u3} CLient IP: {ClientIp} Correlation Id: {CorrelationId} header-name: {headername} {Message:lj}{NewLine}{Exception}")
                .Enrich.WithClientIp()
                .Enrich.WithCorrelationId()
                .Enrich.WithRequestHeader("header-name")
                .Enrich.WithRequestHeader("another-header-name", "SomePropertyName")
                .CreateLogger();
        }

        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            // ...
            services.AddHttpContextAccessor();
            // ...
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            // ...
            loggerFactory.AddSerilog();
            // ...
        }
    }
}
产品 兼容的和额外的计算目标框架版本。
.NET 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 标准化 的信息。

NuGet 包 (40)

显示依赖 Serilog.Enrichers.ClientInfo 的前 5 个 NuGet 包

下载
SuchenExpert.Core.Common

此包适用于 SuchenExpert 项目

KAM.Aether.SharedLibraries

KAM.Aether.SharedLibraries 和 SharedModels

Farsica.Framework

Asp.net Core 应用程序框架

FFCEI.Microservices

一个用于ASP.NET Core 6+ 微服务开发的免费库,包含模型、模型仓储、Entity Framework Core 以及常见的Web Api特性,如CORS、JSON序列化修复、Swagger生成和JWT身份验证,以实现简单和客观的微服务开发。

IntelWash.BaseAPI.Common

包描述

GitHub 仓库 (5)

显示依赖于 Serilog.Enrichers.ClientInfo 的前5个最受欢迎的GitHub仓库。

仓库 星级
featbit/featbit
一个用.NET编写的功能标志服务
neozhu/CleanArchitectureWithBlazorServer
这是一个遵循干净架构原则创建Blazor Server仪表板应用的仓库
specklesystems/speckle-sharp
.NET SDK、模式及连接器:Revit、Rhino、Grasshopper、Dynamo、ETABS、AutoCAD、Civil3D 等。
neozhu/visitormanagement
帮助管理因各种原因到机构访问的访客。它允许访客通过数字签到消除繁琐的注册和其他文件。此外,它还跟踪校园内每个人的活动时间和情况。机构有安保人员将详细信息输入某些笔记本以保持日志,这实际上是难以协调的。对于访客来说,在门口站立并提供访问详情真是太不舒适了。为了简化注册、入门、离门和时间跟踪及记录历史,这个VMS非常有用!!
Corsinvest/cv4pve-admin
Corsinvest 为 Proxmox VE Web Admin 群集 - 类似于 vCenter,但适用于 Proxmox VE
版本 下载 最后更新
2.1.1 13,707 8/2/2024
2.1.0 25,408 7/18/2024
2.0.3 1,743,558 11/1/2023
2.0.2 2,015 10/31/2023 2.0.2 已弃用,因为它有严重错误。
2.0.1 403,167 9/1/2023 2.0.1 已弃用,因为它有严重错误。
2.0.0 406,163 6/30/2023
1.3.0 538,498 6/1/2023
1.2.0 2,886,418 6/26/2022
1.1.4 2,221,727 8/22/2021
1.1.4-dev01 929 8/22/2021
1.1.3 1,594,660 12/18/2020
1.1.2 127,484 12/7/2020
1.1.1 1,286 12/6/2020
1.1.0 134,051 4/23/2020
1.0.0 19,811 1/5/2020

修复#39 - ClientIpEnricher 忽略了更新后的 HttpContext.Connection.RemoteIpAddress