我正在使用 NLog 在我的 asp.net mvc (C#) 应用程序中记录异常。
NLog 在发布模式下不工作。在调试模式下运行时也是如此。
可能是什么问题?有什么解决办法吗?
我正在使用 NLog 在我的 asp.net mvc (C#) 应用程序中记录异常。
NLog 在发布模式下不工作。在调试模式下运行时也是如此。
可能是什么问题?有什么解决办法吗?
我遇到了和你一样的问题:
我尝试更改目录,并更改权限无济于事。我什至尝试启用内部日志记录,但即使这样也没有用!没有失败,没有例外,什么都没有!
在进行了更多调查后,我找到了解决方案。 出于某种原因,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
设置环境变量:NLOG_INTERNAL_LOG_LEVEL 和 NLOG_INTERNAL_LOG_FILE,重新运行你的发布版本然后检查日志文件看看有什么问题
对于任何不确定“为什么 nlog 不能在 prod 环境中工作”的人:
祝你好运。
值得检查的另一件事是您的日志目录和/或文件的写权限。
如果启用,权限错误或任何其他错误将显示在内部日志中。这就是我设置我的方式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>
我认为您应该向发布目录 IIS_IUSRS 提供写入权限。
您可以从代码中激活 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
假设您以正确的方式配置了 NLog,就像其他答案所建议的那样,尝试其中一个
服务器的写入权限
如果您使用的是 IIS,请为您的日志文件夹授予用户IIS_IUSRS的WRITE权限。
构造函数
public LoggerService() {
_logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
}
The path for nlog.config could be different for you. Mine was on the same folder
确保您的目标文件保存在“/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>
将 nlog 配置传输到应用程序的配置文件(例如 web.config),然后重试。