如何以编程方式为异步目标配置NLog? [英] How to configure NLog programmatically for Async target?

查看:0
本文介绍了如何以编程方式为异步目标配置NLog?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我想使用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添加规则就足够了吗?

推荐答案

重要的是AddRule引用异步包装程序,否则它将不缓冲地直接写入目标。

// 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

这篇关于如何以编程方式为异步目标配置NLog?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆