我正在使用NLog来记录我的asp.net mvc(C#)应用程序中的异常。
NLog无法在发布模式下工作。在调试模式下运行时也是如此。
可能是什么问题?有没有解决这个问题?
答案 0 :(得分:4)
我遇到了和你一样的问题:
我尝试更改目录,并将权限更改为无效。我甚至尝试启用内部日志记录,但即使这样也行不通!没有失败,没有例外,没有!
在做了一些调查之后,我找到了解决方案。 由于某种原因,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环境中工作的人来说,
答案 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>