NLog配置文件存在但日志无输出的问题排查求助
大家好,我最近碰到一个NLog日志不生成的问题,试了好几种方法都没解决,想请各位帮忙分析下。
我目前用NLog库做应用的日志记录,已经在主窗体类里声明了Logger实例:
public partial class FenetrePrincipale : Form { #region NLog private static readonly Logger logger = LogManager.GetLogger("FenetrePrincipale"); #endregion ...
然后在业务代码里调用了日志输出:
private bool StartService() { try { logger.Debug("Try to start service");
我的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"> <targets> <target name="file" xsi:type="File" fileName="${basedir}/${date:format=yyyyMMdd}.log" layout="${longdate} | ${level:uppercase=true} | ${message}" /> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="file" /> </rules> </nlog>
但现在的问题是,无论怎么运行程序,都没有生成指定的日志文件。我已经确认程序运行的目录是正确的——通过Visual Studio查看进程PID,再到任务管理器里找到对应进程并打开文件位置验证过。而且之前在同一个目录下程序是能正常生成日志的,所以应该不是文件权限的问题。
我有两个疑问:
- 有没有办法把
logger.Debug(text);改成类似带输出参数的形式(比如logger.Debug(text, out explanation)),让NLog返回日志生成失败的原因?我反编译了NLog的代码,没找到这类重载方法,应该是没有这种方式? - 还有什么其他有效的排查手段能找出问题所在吗?
编辑1:
按照一位朋友的建议,我修改了NLog.config的根节点,加上了内部日志的配置,想通过内部日志排查问题:
<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" internalLogFile="c:\Temp_Folder\log.txt" internalLogLevel="Trace">
但修改后还是没有任何效果,我用命令行查看指定路径的日志文件,显示文件不存在:
Command prompt>dir c:\Temp_Folder\log.txt ... Directory of c:\Temp_Folder File Not Found
我检查了NLog.dll的属性,版本是比较新的,应该满足内部日志的版本要求(NLog 4.3及以上支持内部日志),而且我的解决方案里已经正确引用了NLog相关组件。
另外,我在Windows系统日志(Windows Logs -> System)里看到一条COM服务器权限错误的记录,不知道会不会和这个日志问题有关?
The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID
{2593F8B9-4EAF-457C-B68A-50F6B8EA6B54}
and APPID
{15C20B67-12E7-4BB6-92BB-7AFF07997402}
to the user DOMAIN\DDM SID (S-1-5-21-1049629045-689772303-932725714-51094) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.
编辑2:
虽然我一开始觉得把NLog.config添加到Visual Studio解决方案项目里没什么意义,但还是抱着试试的心态操作了,结果还是一样——既没有生成目标日志文件,也没有生成内部日志文件C:\Temp_Folder\Log.txt。
备注:内容来源于stack exchange,提问作者Dominique

