我最近将我的asp.net核心项目升级到.net core 2.2,同时更新了NLog.Web.AspNetCore。
这样做之后(也许是巧合?),我注意到没有生成日志文件。
在我的配置中,这是我的目标:
<target xsi:type="File" name="allfile" fileName="${currentdir}/Logs/nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
经过一些调试后,我意识到如果我明确指定路径,则它将生成日志文件:
<target xsi:type="File" name="allfile" fileName="E:\Project\Logs\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
我在配置中设置了throwExceptions="true"
,但是当不生成文件时不会抛出异常,它只是默默地不创建文件。
要进一步调试,我创建了一个控制台项目,并添加了nuget NLog.Web.AspNetCore并复制了我的配置。现在,在控制台项目中,它可以正常工作,并在调试输出目录中创建日志文件。
有什么方法可以调试为什么在我的主项目中没有使用该目标生成日志文件?
答案 0 :(得分:1)
不要使用${currentdir}
,而是考虑使用${aspnet-appbasepath}
(如果不是进程内托管,则考虑使用${basedir}
)
在某些情况下,NLog InternalLogger通常会给出很好的提示。
请避免将throwExceptions="true"
直接用于单元测试,而不是用于生产环境。