【问题标题】:Ignoring NLog Configuration referenced in other assembly忽略其他程序集中引用的 NLog 配置
【发布时间】:2015-07-30 21:05:50
【问题描述】:

我对 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>

【问题讨论】:

    标签: c# nlog


    【解决方案1】:

    如果他们正在写入根记录器,您应该将根记录器配置为不记录到您关心的任何地方(可能将其指向控制台记录器),并且您的应用程序可以记录到写入文件的特定记录器。

    丑陋,但应该可以。

    例如: 添加这个目标:

    &lt;target name="console" xsi:type="Console" /&gt;

    并将* 规则更改为:

    &lt;logger name="*" minlevel="Fatal " writeTo="console" /&gt;

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

    &lt;logger name="MyNameSpace.*" minlevel="Trace" writeTo="logfile" final="true" /&gt;

    假设您定义了一个指向您的文件的 logfile 目标。

    【讨论】:

    • 或者,你可以切换到 Log4net ;)
    • 你能给我一些样品吗?我尝试了以下..但他们的东西仍然记录在我的.. 如果您看到记录器,我已经创建了一个指向其他文件的根记录器,然后为我的班级创建了非常具体的记录器。它仍在将他们的东西记录到我的文件中,并且没有创建他们的文件
    • 在这种情况下,我想我错过了一些关于他们如何使用配置的重要信息 - 抱歉,我无法提供更多帮助。
    • 我尝试了您提到的解决方案,但似乎不起作用。看起来他们的配置文件是在我的之后加载的,所以它会覆盖我的??我没有线索。他们还通过将 dll 包含到他们的程序集中来阻止 Log4Net。我正在使用企业库日志记录,但它非常缓慢并且似乎不是异步的。
    • 我有另一种方法我们可以尝试,在 NLog 已经配置后通过代码更改配置。我不确定这是否可行,但请查看here 了解更多信息。至少您可以查询现有配置并查看其中的真正内容。让我们知道您发现了什么。
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多