14

我正在使用 NLog 在我的 asp.net mvc (C#) 应用程序中记录异常。

NLog 在发布模式下不工作。在调试模式下运行时也是如此。

可能是什么问题?有什么解决办法吗?

4

9 回答 9

6

我遇到了和你一样的问题:

  • ASP.NET MVC 3
  • .NET 4
  • IIS 7
  • 发布模式

我尝试更改目录,并更改权限无济于事。我什至尝试启用内部日志记录,但即使这样也没有用!没有失败,没有例外,什么都没有!

在进行了更多调查后,我找到了解决方案。 出于某种原因,NLog 根本没有加载配置文件。 在我以编程方式启用内部日志记录后,我意识到了这一点。内部记录报告了这一点:

2012-02-13 11:34:40.3181 Debug Targets for MyMvcController by level:
2012-02-13 11:34:40.3181 Debug Trace =>
2012-02-13 11:34:40.3181 Debug Debug =>
2012-02-13 11:34:40.3181 Debug Info =>
2012-02-13 11:34:40.3181 Debug Warn =>
2012-02-13 11:34:40.3181 Debug Error =>
2012-02-13 11:34:40.3181 Debug Fatal =>

这基本上是说没有为任何日志级别定义目标!绝对不正确!

我的 NLog 配置文件尽可能简单(并且它被设置为复制到输出目录):

<configuration>
  <configSections>
     <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <!-- Other XML Sections -->
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="file" xsi:type="File" fileName="${basedir}/MyApplication.log" />
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="file" />
    </rules>
  </nlog>
</configuration>

我仍然不确定发生这种情况的确切原因,但是将 NLog 配置移动到 web.config 中直接解决了问题。

另见:https ://github.com/nlog/NLog/wiki/Configuration-file#configuration-file-format

于 2012-02-13T16:47:47.153 回答
1

设置环境变量:NLOG_INTERNAL_LOG_LEVEL 和 NLOG_INTERNAL_LOG_FILE,重新运行你的发布版本然后检查日志文件看看有什么问题

于 2010-06-22T13:47:20.860 回答
1

对于任何不确定“为什么 nlog 不能在 prod 环境中工作”的人:

  1. 转到 Nlog.config 文件
  2. 在nlog标记中设置 throwExceptions=" true "并以适当的错误开始调试。

祝你好运。

于 2018-03-08T12:27:51.567 回答
0

值得检查的另一件事是您的日志目录和/或文件的写权限。

如果启用,权限错误或任何其他错误将显示在内部日志中。这就是我设置我的方式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"

      <!-- setting to True will break your application so be careful  -->
      throwExceptions="false"

      <!-- change level to your preference  -->
      internalLogLevel="Error" internalLogFile="c:\your-path\nlog-internal.log">


      <!-- your NLog settings  -->
      <!-- ...  -->

</nlog>
于 2021-06-24T00:32:50.247 回答
0

我认为您应该向发布目录 IIS_IUSRS 提供写入权限。

于 2021-04-20T06:56:33.160 回答
0

您可以从代码中激活 NLog InternalLogger,这样您就可以排除正确部署 NLog.config 的问题:

// enable internal logging to the console
NLog.Common.InternalLogger.LogToConsole = true;
     
// enable internal logging to a file
NLog.Common.InternalLogger.LogFile = "c:\\nlog-internal.txt"; // On Linux one can use "/home/nlog-internal.txt"
    
// set internal log level
NLog.Common.InternalLogger.LogLevel = LogLevel.Debug;
    
// Perform test output, ensure first NLog Logger is created after InternalLogger is enabled.
NLog.LogManager.GetLogger("Test").Info("Hello World");

另见:https ://github.com/NLog/NLog/wiki/Internal-Logging

另见:https ://github.com/NLog/NLog/wiki/Logging-troubleshooting

于 2021-03-30T07:39:07.053 回答
0

假设您以正确的方式配置了 NLog,就像其他答案所建议的那样,尝试其中一个

  1. 服务器的写入权限

    如果您使用的是 IIS,请为您的日志文件夹授予用户IIS_IUSRS的WRITE权限。

  2. 构造函数

     public LoggerService() {
         _logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
     }
    
    The path for nlog.config could be different for you. Mine was on the same folder
    
于 2018-01-15T14:13:23.550 回答
0

确保您的目标文件保存在“/logs/”文件夹中。见下文

<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />

我尝试登录“root/log.log”但没有工作,然后尝试“root/logs/log.log”并工作

下面是完整的配置文件。

<?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="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" >


  <!-- optional, add some variabeles
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="myvar" value="myvalue"/>

  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <targets>

    <!-- 
    add your targets here 
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->

    <!--
    Writing events to the a file with the date in the filename. -->
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />

  </targets>

  <rules>
    <!-- add your logging rules here -->

    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"-->
    <logger name="*" minlevel="Debug" writeTo="f" />

  </rules>
</nlog>
于 2016-01-26T16:21:58.093 回答
0

将 nlog 配置传输到应用程序的配置文件(例如 web.config),然后重试。

于 2015-08-13T10:44:13.040 回答