不同的NLog实例为了在不同的配置文件中分离NLog配置

sup*_*314 6 c# configuration logging config nlog

目前,如果我将 LogManager.Configuration 指向不同的配置文件,我将面临 NLog.Configuration 覆盖问题。

是否可以在同一个项目中创建多个 NLog 实例以防止共享相同的 LogManager.Configuration?

就像是 :

FruitType 类有自己的 NLog 实例,它的 NLog.LogManager.Configuration 从默认的 nlog.config 中读取。

然后,我想将子类配置为如下所示:

Apple 类实例有自己的 NLog 实例,Apple 类 NLog.LogManager.Configuration 从 AppleNLog.config 而不是 nlog.config 读取。

然后是新水果

Orange类实例有自己的NLog实例,Orange类实例NLog.LogManager.Configuration是从OrangeNLog.config而不是nlog.config读取的。

我想这样做的原因是将 nlog 规则分离到不同的配置文件中,而不是默认的 nlog.config 来微观管理 nlog 配置。

Jul*_*ian 6

有两种方法可以实现这一点:

一种。创建单独的活动LogFactory对象并分离配置。

例如

public static class MyLogManager
{
    static public NLog.LogFactory Factory1 = new LogFactory(new XmlLoggingConfiguration("nlogconfig1.xml"));
    static public NLog.LogFactory Factory2 = new LogFactory(new XmlLoggingConfiguration("nlogconfig2.xml"));
}
Run Code Online (Sandbox Code Playgroud)

用法:

var logger1 = MyLogManager.Factory1.GetCurrentClassLogger();
//or
var logger2 = MyLogManager.Factory2.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)

湾 较少分离但仍然模块化的配置文件,使用<include> 例如 nlog.config

public static class MyLogManager
{
    static public NLog.LogFactory Factory1 = new LogFactory(new XmlLoggingConfiguration("nlogconfig1.xml"));
    static public NLog.LogFactory Factory2 = new LogFactory(new XmlLoggingConfiguration("nlogconfig2.xml"));
}
Run Code Online (Sandbox Code Playgroud)

nlog1.config 和 nlog2.config 包含常规<targets><rules>. 但请注意目标的潜在名称冲突。

  • 大佬,非常感谢!这帮助我解决了我遇到的另一个问题,我以为我们被“LogManager”困住了,并且真的需要独立的配置来从我的工作线程登录到不同的文件,直到我发现它才意识到“LogFactory”是一个东西答案的宝石。再次感谢你 :) (3认同)