忽略其他程序集中引用的NLog配置

本文关键字:引用 NLog 配置 集中 程序集 其他 程序 | 更新日期: 2023-09-27 18:05:33

我有一个独特的问题与NLog。我有一个第三方程序集,我们使用到我们的项目。他们在他们的项目中使用了NLog,并将NLog配置引用到他们的配置中,我没有访问权限。最初,我甚至在将NLog添加到项目中都遇到了问题,因为两个版本的dll都不同。我不得不下载NLog的源代码并更改程序集名称,因为别名不适合我(或者我不知道如何使用它)。在给我自己的汇编名称后,NLog开始工作,但是…它也开始记录第三方日志信息。看起来他们在定义记录器时不够小心,他们只是定义了(*)。现在我的问题是,我如何避免他们的东西登录到我的文件?我也试过将其设置为final = true。下面是我的简单配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <!-- add your targets here -->
    <!--
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    -->
    <target name="errorLog" xsi:type="File"
            fileName="${basedir}/logs/error/${shortdate}.log" 
            layout="${longdate} ${uppercase:${level}} ${message}${onexception:${newline}EXCEPTION': ${exception:format=ToString}}"
    />
    <target name="generalLog" xsi:type="File"
            fileName="C:/logs/${date:format=yyyy-MM-dd}.log"
            layout="${longdate} ${uppercase:${level}} ${message}"/>   
  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger name="Errors" writeTo="errorLog" minlevel="Warn"/>
    <logger name="EBusiness.Model.*" writeTo="generalLog" levels="Trace,Debug,Info" final="true"/>
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>
</nlog>

忽略其他程序集中引用的NLog配置

如果它们写入到根记录器,你应该配置根记录器不记录到任何你关心的地方(可能指向控制台记录器),你的应用程序可以记录到一个特定的记录器,它写到你的文件。

很丑,但应该能工作。

例如

:添加这个目标:

<target name="console" xsi:type="Console" />

并将*规则改为:

<logger name="*" minlevel="Fatal " writeTo="console" />

然后,添加您自己的记录器规则,如:

<logger name="MyNameSpace.*" minlevel="Trace" writeTo="logfile" final="true" />

假设您已经定义了指向文件的logfile目标