log4net

编辑

此布局实现将 log4net 事件格式化为符合 Elastic 通用架构规范的 JSON 表示形式。

安装

编辑

添加对 Elastic.CommonSchema.Log4net 包的引用

<PackageReference Include="Elastic.CommonSchema.Log4net" Version="8.6.0" />

用法

编辑

使用配置进行设置

编辑

在附加程序的配置中指定布局类型

<log4net>
    <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
    </root>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="Elastic.CommonSchema.Log4net.EcsLayout, Elastic.CommonSchema.Log4net" />
    </appender>
</log4net>

以编程方式设置

编辑
var hierarchy = (Hierarchy)LogManager.CreateRepository(Guid.NewGuid().ToString());
var appender = new ConsoleAppender { Layout = new EcsLayout() }; // Use the ECS layout.
hierarchy.Root.AddAppender(appender);
hierarchy.Root.Level = Level.All;
hierarchy.Configured = true;

Layout = new EcsLayout() 行指示 log4net 使用 ECS 布局。 上面的示例使用控制台附加程序,但您可以随意使用任何您选择的附加程序,也许可以考虑使用文件系统目标和 Elastic Filebeat 来实现持久可靠的摄取。

支持 ECS 的属性

编辑

任何在 LogTemplateProperties.* 下可用的有效 ECS 日志模板属性(例如 LogTemplateProperties.TraceId)都受支持,并将直接设置相应的 ECS 字段。

输出

编辑

除了 必填字段 之外,输出还包含其他数据

  • log.origin.file.name 来自 LocationInformation
  • log.origin.file.line 来自 LocationInformation
  • log.origin.function 来自 LocationInformation
  • event.created 来自时间戳
  • event.timezone 等于本地时区
  • host.hostname 来自 HostName 属性
  • process.thread.id 来自 ThreadName(如果其值为数字)
  • process.thread.name 来自 ThreadName(如果其值不是数字)
  • service.name 来自入口程序集或调用程序集
  • service.version 来自入口程序集或调用程序集
  • error.message 来自 ExceptionObject
  • error.type 来自 ExceptionObject
  • error.stacktrace 来自 ExceptionObject
  • metadata 来自属性。如果记录了格式化消息,它还包含消息模板和参数

示例日志事件输出(为易读性而格式化)

{
    "@timestamp": "2022-08-28T14:06:28.5121651+02:00",
    "log.level": "INFO",
    "message": "Hi! Welcome to example!",
    "metadata": {
        "global_property": "Example",
        "message_template": "{0}! Welcome to example!"
        "0": "Hi"
    },
    "ecs": {
        "version": "8.3.1"
    },
    "event": {
        "timezone": "Central European Time",
        "created": "2022-08-28T14:06:28.5121651+02:00"
    },
    "host": {
        "hostname": "HGU780D3"
    },
    "log": {
        "logger": "Elastic.CommonSchema.Log4net.Example.Program",
        "original": null,
        "origin": {
            "file": {
                "name": "C:\\Development\\Elastic.CommonSchema.Log4net.Example\\Program.cs",
                "line": 17
            },
            "function": "Main"
        }
    },
    "process": {
        "thread": {
            "id": 1
        }
    },
    "service": {
        "name": "Elastic.CommonSchema.Log4net.Example",
        "version": "1.0.0.0"
    }
}