NLog引用项目没有日志输出

时间:2019-02-13 02:08:41

标签: c# .net nlog

我在一个Visual Studio 2017解决方案中使用NLog 4.5.11。它在启动项目中具有nlog.config,但是实际所需的日志记录来自引用了NLog的另一个项目(但不存在nlog.config)。运行此解决方案效果很好,可以在我期望的位置生成NLog日志。

第二个VS解决方案同时使用(引用)启动项目和带有日志的项目。此项目的一个注意事项是它是一个Excel加载项。当我运行第二个解决方案(从VS调试)时,我没有得到应该通过引用的项目的代码和NLog日志记录触发的NLog日志记录。我没有收到任何错误,异常或错误文件等。

我也尝试将用于NLog的NuGet软件包安装到第二个解决方案。我也尝试向其中添加nlog.config的副本。我查看了构建目录,并将NLog dll和配置文件复制到了那里。我也尝试过启用throwExceptions =“ true”和internalLogLevel =“ Trace”。

我一直在寻找SO和其他地方,但是我找不到解决方案,甚至无法调试它。曾经发生的一切仅仅是没有输出,这真令人沮丧。

NLog.config

<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Trace" internalLogFile="c:\temp\nlog-internal.log">

  <variable name="appName" value="FSIS" />
  <variable name="logDir" value="c:\temp\Rbnz.Fsis.Logging" />
  <variable name="logDirArchive" value="c:\temp\Archive\Rbnz.Fsis.Logging" />

  <targets async="true">
    <target xsi:type="File"
            name="default"
            layout="${longdate} - ${level:uppercase=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
            fileName="${logDir}\${shortdate}.log"
            keepFileOpen="false"
            archiveFileName="${logDirArchive}\${shortdate}.{##}.log"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
    />
  </targets>
  <rules>
    <logger name="*" writeTo="default" minlevel="Debug" />
  </rules>
</nlog>

在引用项目的代码内部使用:

private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

然后在方法内部:

logger.Info("Start: CompileSeries()");
logger.Info("Done: CompileSeries()");

我希望,如果NLog日志记录适用于某个项目,则将该项目作为另一个项目(在另一个解决方案中)的引用包含在内,将触发相同的日志记录。显然我在这个假设中是错误的。

1 个答案:

答案 0 :(得分:0)

根据您所写的内容,您有一个包含两个项目的第一个解决方案-一个配置logger对象的启动项目。该解决方案还有一个引用启动项目的logger对象的项目。很好

现在您有了第二个解决方案。在此解决方案中,您只需引用第一个解决方案的启动项目程序集和第一个解决方案的第二个项目。您的第二个解决方案有自己的项目,该项目正在尝试访问第一个解决方案的引用项目公开的logger

此问题是您的第一个解决方案实际上执行了其启动项目。您的第二个解决方案不执行它-只是引用它。因此,您的logger对象没有被NLog正确初始化。

解决方案(通常)是确保在第二个解决方案中初始化logger对象,就像在第一个解决方案中初始化一样。如果您需要更具体的指导,请显示有关您的第一个解决方案的启动项目如何初始化logger对象的细节,我应该能够帮助您在第二个解决方案中复制该逻辑。

您无法从其他解决方案登录的结论不正确。都是关于正确的对象初始化。

我希望这会有所帮助。