随笔-313  评论-12138  文章-1  trackbacks-256

NLog文章系列——如何排错

作者:Jarosław Kowalski <jaak@jkowalski.net>

翻译:CrazyCoder(由衷感谢他的热心!!)

原文:http://www.nlog-project.org/howto_troubleshoot.html

更多关于NLog的中文文章,请参考《NLog文章系列》。

 

Nlog – 如何排错

当NLog不能正常工作时,需要输出一些调试信息来判断到底是哪里出了问题。这篇文档将对NLog的内部调试功能做一些说明。

打开内置调试

  1. NLOG_INTERNAL_LOG_TO_CONSOLE – 如果在系统环境变量中设置了这个系统变量,那么NLog会调用Console.WriteLine输出内部调试信息。
  2. NLOG_INTERNAL_LOG_FILE – 如果在在系统环境变量中设置了这个系统变量,那么NLog会把内部调试信息输出到指定的文件中。前提是系统当前用户对这个文件有写权限。
  3. NLOG_INTERNAL_LOG_LEVEL – 设置内部日志级别的环境变量。内部日志的级别有:Debug, Info, Warn, Error, Fatal – 缺省级别Info在大多数情况下已经够用了,要得到最为详细的日志信息,请把级别设为Debug

 

使用系统环境变量打开内部日志功能

交互式

只要在系统命令行使用SET命令设置需要的系统环境变量就可以了,之后就可以运行目标程序。例如:

Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\MyApp>set NLOG_INTERNAL_LOG_FILE=c:\temp\mylog.txt
C:\MyApp>set NLOG_INTERNAL_LOG_LEVEL=Debug
C:\MyApp>myapp.exe

 

使用服务

TO BE WRITTEN

 

通过程序

TO BE WRITTEN

 

Last updated: 2006-07-10 11:32:55

posted on 2006-12-20 00:01 Dflying Chen 阅读(2645) 评论(11) 编辑 收藏

评论:
#1楼 2006-12-20 09:13 | Anthan      
winform和控制台记录log都没问题,但是web程序就会有问题,我想肯定是我得文件夹权限设置有问题,但是我明明已经给当前虚拟目录所对应得物理文件夹加了ASP.NET得写入权限但还是报下面错误。
To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.
我把NLog的Source加载上了debug都没得出个结果,貌似很正常啊。郁闷ing...

 回复 引用 查看   
#2楼 2006-12-20 11:52 | CrazyCoder      
可能是权限的问题。

个人建议:
试一下把你的输出目标改为Windows的Temp目录下的某个文件,因为ASPNET帐号对这个目录应该是有完全的读写权限的,如果成功,则确定是权限的问题。然后google一下如何给ASPNET帐号赋予特定的目录的读写权限吧。

good luck!

 回复 引用 查看   
#3楼 2006-12-20 13:46 | Anthan      
@CrazyCoder
多谢,刚才测试如果fileName写物理路径,写到那里都可以,比如F:\Log\NLog\NLogTest\NLogWebTest\Log\LogFile.txt,不用加任何权限,甚至文件夹都可以动态创建,比如上面路径中的Log文件夹
但是,为什么一遇到好的就要说但是呢?呵呵
如果如果fileName写相对路径,或者直接写个文件名就会报没有权限的异常,就算给相应的文件夹加了ASPNET的完全控制权限都没问题。
甚是郁闷啊...
在Web.config中添加一个节点



则不会报异常,但是也没有相应的文件记录下来

 回复 引用 查看   
#4楼 2006-12-20 16:05 | CrazyCoder      
@Anthan,

能把配置文件的相关部分贴上来看看么?

 回复 引用 查看   
#5楼 2006-12-20 18:02 | Anthan      
<nlog internalLogFile="nlog.txt" internalLogLevel="Error" throwExceptions="true"
xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="File" name="filelog" fileName="LogFile.txt" layout="Date:${longdate}${newline}Message:${message}"/>
</targets>
<rules>
<logger name="*" minlevel="Trace" maxlevel="Fatal" writeTo="filelog"></logger>
</rules>
</nlog>

 回复 引用 查看   
#6楼 2006-12-21 15:31 | CrazyCoder      
@Anthan

我分别在Vista和XP sp2上做了测试,XP sp2成功,Vista失败,不过没有报告任何异常。应该是权限的问题。

建议你到别的机器上试一下。

 回复 引用 查看   
#7楼 2006-12-21 19:43 | Anthan      
@CrazyCoder
我在本机是XP sp2,你就是用我上面的配置嘛?
如果如果fileName写相对路径,或者直接写个文件名,并且在web.config中加个节点的话是没有错误信息的,但还是记录不下来日志。
奇了怪了,你可以把你的代码发给我嘛?

 回复 引用 查看   
#8楼 2006-12-22 11:17 | CrazyCoder      
我的程序很简单,page上放了个button,点击后记录一条日志而已,就不用发了吧。不过今天早上来试貌似也出问题了。:(

我删除了昨天的log文件,发现NLog没有在web程序的base dir建立新的log文件,而是在VS 2005的Microsoft Visual Studio 8\Common7\IDE目录下建立了一个LogFile.txt文件,把日志信息写了进去。晕!

要找出原因的话可能需要跟踪一下源代码,或者你直接和作者联系一下,说实话我没有深入了解过NLog。

 回复 引用 查看   
#9楼[楼主] 2006-12-22 23:11 | Dflying Chen      
@CrazyCoder
@Anthan
搞定了吧?

 回复 引用 查看   
#10楼 2007-08-12 15:59 | MK2      
@Dflying Chen
类似以下代码,怎样设置在Debug时让它抛出错误,而在Release不抛出呢?
catch (Exception e)
{
Logger.DebugException(_LastSqlString, e);
}

 回复 引用 查看   
#11楼 2011-02-25 17:26 | 木漂流      
@MK2
使用预编译就可以;

 回复 引用 查看   
除非特别声明,本站内所有资源,包括但不限于文章,代码,图片等,均应用于Dflying版权说明
关于ASP.NET AJAX,您可以:
直接阅读ASP.NET AJAX文章分类
Atlas文章打包下载(截至4/28/2006)
加入ASP.NET AJAX学习团队
询问关于ASP.NET AJAX的问题
加入ASP.NET AJAX讨论群
阅读愚作《ASP.NET AJAX程序设计》
点击阅读
点击阅读


关于Windows Vista,您可以:
加入Windows Vista开发团队!
昵称:Dflying Chen
园龄:5年10个月
粉丝:127
关注:0

搜索

 
 

最新随笔

随笔分类(352)

随笔档案(313)

Blog Roll

Dflying的其他Blog

Online Chat

统计信息

积分与排名

  • 积分 - 2442908
  • 排名 - 7

最新评论

阅读排行榜

评论排行榜