不同的 NLog 实例,以便在不同的配置文件中分离 NLog 配置

Different NLog Instance In Order to Separate NLog configuration in different config files

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

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

类似于:

FruitType class 有自己的 NLog 实例,它的 NLog.LogManager.Configuration 是从默认 nlog.config.

读取的

然后,我想将 sub-class 配置为如下内容:

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

然后是新水果

Orange class 实例有自己的 NLog 实例和 Orange class 实例 NLog.LogManager.Configuration 是从 OrangeNLog.config 而不是 nlog.config.

读取的

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

有两种方法可以实现:

一个。创建独立的生活 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"));
}

用法:

var logger1 = MyLogManager.Factory1.GetCurrentClassLogger();
//or
var logger2 = MyLogManager.Factory2.GetCurrentClassLogger();

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

<nlog>
  ...
  <include file="${basedir}/nlog1.config"/>      
  <include file="${basedir}/nlog2.config"/>

  ...
</nlog> 

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