Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为同步日志记录继承NLog WrapperTargetBase_C#_Nlog - Fatal编程技术网

C# 为同步日志记录继承NLog WrapperTargetBase

C# 为同步日志记录继承NLog WrapperTargetBase,c#,nlog,C#,Nlog,我有一个.NET Core 3.1 Web服务,并使用NLog 4.7.0进行日志记录。我目前正在使用文件日志和filebeat将日志文件中的消息发送给ELK 我想为我的FileTarget创建一个包装器目标。实际目的是将单个web请求的所有日志合并到单个日志消息中,但这可能不是重点 我想从NLog.Targets.Wrappers.WrapperTargetBase继承,但是Write(LogEventInfo logEvent)方法是密封的。这是否意味着我只能对包装器目标使用异步日志记录 这

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

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

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

这是否会影响我如何设置日志配置?注意,我使用的是配置文件,而不是配置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}"
  }```
您有一些选择:

在所有情况下,您都需要类中的属性:

[Target("MyWrapper", IsWrapper = true)]
/// <summary>
/// Gets or sets the target that is wrapped by this target.
/// </summary>
[RequiredParameter]
public Target WrappedTarget { get; set; }
包装器TargetBase单个项目 从WrapperTargetBase继承时,目标可以是异步的,但也可以是同步的。你需要更多的代码来处理它

  • 从WrapperTargetBase继承
  • 重写受保护的重写无效写入(AsyncLogEventInfo logEvent)
  • 使用
    WrappedTarget.writeAsynClogeEvent(logEvent)写入目标
  • 当不使用
    writeAsynClogeEvent
    时,请不要调用
    logEvent.Continuation
    (异常或空)

    包装器targetbase已分组 写入事件分组

  • 从WrapperTargetBase继承
  • 覆盖
    受保护的覆盖无效写入(IList logEvents)
  • 使用循环写入或使用
    asynchHelpers
  • 目标 另一个选项是从目标继承。这是一种更简单的方法,但它不适用于异步开箱即用。 因为您有
    [Target(“MyWrapper”,IsWrapper=true)]
    ,所以这是可行的。你在课堂上需要这个:

    [Target("MyWrapper", IsWrapper = true)]
    
    /// <summary>
    /// Gets or sets the target that is wrapped by this target.
    /// </summary>
    [RequiredParameter]
    public Target WrappedTarget { get; set; }
    
    //
    ///获取或设置由此目标包装的目标。
    /// 
    [必需参数]
    公共目标WrappedTarget{get;set;}