NLog无法在发布模式下工作

时间:2009-12-24 17:33:19

标签: c# asp.net-mvc nlog

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

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

可能是什么问题?有没有解决这个问题?

9 个答案:

答案 0 :(得分:4)

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

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

我尝试更改目录,并将权限更改为无效。我甚至尝试启用内部日志记录,但即使这样也行不通!没有失败,没有例外,没有!

在做了一些调查之后,我找到了解决方案。 由于某种原因,NLog没有加载配置文件AT ALL。我在编程启用内部日志记录后意识到这一点。内部日志记录了这一点:

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配置文件尽可能简单(并且设置为Copy to Output Directory):

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true">
  <targets>
    <target name="file" xsi:type="File" fileName="${basedir}/MyApplication.log" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="file" />
  </rules>
</nlog>

我仍然不确定为什么这种情况正在发生,但将NLog配置移动到web.config直接解决了问题。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

对于任何不确定nlog为什么不在prod环境中工作的人来说,

  1. 转到Nlog.config文件
  2. SET throwExceptions =&#34; true &#34;在 nlog 标记中 并以适当的错误开始调试。
  3. 祝你好运。

答案 3 :(得分:0)

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

答案 4 :(得分: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>

答案 5 :(得分:0)

我遵循了所有其他答案,但它没有奏效。所以我尝试了下面的方法并且有效。

public LoggerService()
{
    _logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
}

nlog.config的路径可能与您有所不同。

FYI :我使用的NLog版本是4.5.10

答案 6 :(得分: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

答案 7 :(得分:0)

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

答案 8 :(得分: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>