如何以编程方式为异步目标配置 NLog?
How to configure NLog programmatically for Async target?
我正在尝试以编程方式配置 Nlog 以与异步方法一起使用。但是,文档似乎主要提供使用 XML. A minimal example using code for an older NLog version is provided 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
引用 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
我正在尝试以编程方式配置 Nlog 以与异步方法一起使用。但是,文档似乎主要提供使用 XML. A minimal example using code for an older NLog version is provided 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
引用 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