继承NLog WrapperTargetBase进行同步日志记录

问题描述 投票:0回答:1

我有一个.NET Core 3.1 Web服务,并使用NLog 4.7.0进行日志记录。我当前正在使用文件日志记录和filebeat来将消息从日志文件发送到ELK。

我想为我的FileTarget创建一个包装器目标。实际目的是将单个Web请求的所有日志合并到单个日志消息中,但这可能不重要。

我想从NLog.Targets.Wrappers.WrapperTargetBase继承,但是Write(LogEventInfo logEvent)方法是密封的。这是否意味着我只能对WrapperTargets使用异步日志记录?

这会影响我如何设置日志记录配置吗?请注意,我使用的是配置文件,而不是配置API。

我现有的FileTarget是这样的:

"appFile": {
    "type": "File",
    "fileName": "c:\\wwwlogs\\MyWebApp\\Combined.log",
    "archiveFileName": "c:\\wwwlogs\\MyWebApp.Web\\archives\\Combined.{#}.log",
    "archiveEvery": "Day",
    "archiveNumbering": "Rolling",
    "maxArchiveFiles": "7",
    "layout": "${longdate}|${aspnet-request-ip}|${aspnet-TraceIdentifier}|${aspnet-user-identity}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}"
  }```
c# nlog
1个回答
0
投票

您有一些选择:

在所有情况下,您都需要在课程中使用该属性:

[Target("MyWrapper", IsWrapper = true)]

WrapperTargetBase单项

从WrapperTargetBase继承时,您的目标可能是异步的,但它也可以同步。您需要更多代码来处理它。

  1. 覆盖protected override void Write(AsyncLogEventInfo logEvent)
  2. WrappedTarget.WriteAsyncLogEvent(logEvent);写入目标

WrapperTargetBase分组

继承自WrapperTargetBase的表单

  1. 覆盖protected override void Write(IList<AsyncLogEventInfo> logEvents)
  2. 循环写或使用AsyncHelpers

目标

另一个选项是从目标Inherit。因为您有[Target("MyWrapper", IsWrapper = true)],所以可以使用。您的班级需要这个:

/// <summary>
/// Gets or sets the target that is wrapped by this target.
/// </summary>
[RequiredParameter]
public Target WrappedTarget { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.