【问题标题】:How to configure NLog programmatically for Async target?如何以编程方式为异步目标配置 NLog?
【发布时间】:2021-08-09 22:18:25
【问题描述】:

我正在尝试以编程方式配置 Nlog 以与异步方法一起使用。但是,该文档似乎主要提供了使用 XML 进行配置的示例。 here 提供了一个使用旧 NLog 版本代码的最小示例。

我想通过使用NLog.Config.LoggingConfiguration() 来做到这一点,所以我是这样进行的:

var config = new NLog.Config.LoggingConfiguration();

// Targets:
NLog.Targets.FileTarget fileTarget = new NLog.Targets.FileTarget("fileTarget")
            {
                FileName = "\\MyLogFileDirectory.txt",
                ArchiveAboveSize = 25000000,
                MaxArchiveFiles = 10
            };

//Handle Async:
NLog.Targets.Wrappers.AsyncTargetWrapper asyncFileTarget = new NLog.Targets.Wrappers.AsyncTargetWrapper(fileTarget)
            {
                Name = fileTarget.Name,
                QueueLimit = 10,
                OverflowAction = NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction.Discard
            };
config.AddTarget(asyncFileTarget);

// Rules: 
config.AddRule(LogLevel.Info, LogLevel.Fatal, fileTarget, "MyLog");

NLog.LogManager.Configuration = config;

编辑:

我的问题如下: 是否需要为 asyncFileTarget 创建单独的规则,或者为 fileTarget 添加规则就足够了?

【问题讨论】:

    标签: c# nlog


    【解决方案1】:

    AddRule 引用 AsyncWrapper 很重要,否则它将直接写入目标而无需缓冲。

    // Apply Async
    NLog.Targets.Wrappers.AsyncTargetWrapper asyncFileTarget = new NLog.Targets.Wrappers.AsyncTargetWrapper(fileTarget)
    {
       Name = fileTarget.Name,
       QueueLimit = 10,
       OverflowAction = NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction.Discard
    };
    
    // WriteTo Async
    config.AddRule(LogLevel.Info, LogLevel.Fatal, asyncFileTarget, "MyLog");
    

    注意AddRule 在内部自动调用AddTarget

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多