Asp.net Core使用NLog无自定义日志输出问题求助
问题排查与解决方案
我帮你梳理下几个可能导致自定义日志不输出的问题点,咱们一个个来排查:
1. 重复定义的Target名称
你的nlog.config里<targets>部分有两个同名的fileLogDebug目标:
<target name="fileLogDebug" xsi:type="File" fileName="${logDirectory}/mobileController.txt" /> <target name="fileLogTrace" xsi:type="File" fileName="${logDirectory}/trace.txt" /> <target name="fileLogDebug" xsi:type="File" fileName="${logDirectory}/debug.txt" />
NLog会自动用后定义的同名Target覆盖前面的,这就导致第一个指向mobileController.txt的Target完全无效,而且这种重复定义还可能引发配置解析的隐性异常,建议把第一个Target改成唯一名称,比如fileLogMobile。
2. 规则引用了未定义的Target
你的<rules>里用到了fileLogWarn和fileLogSecurity,但在<targets>块里根本没配置这两个目标:
<logger name="*" level="Warn" writeTo="fileLogWarn" /> <logger name="*" level="Fatal" writeTo="fileLogSecurity" />
虽然NLog会忽略这些无效规则,但为了避免配置解析时的潜在问题,要么补上对应的Target定义,要么直接删掉这些无效规则。
3. NLog初始化顺序错误
你的初始化代码顺序搞反了,正确的流程应该是先加载NLog配置,再将NLog添加到LoggerFactory,否则LoggerFactory可能会使用默认的NLog配置,而非你自定义的nlog.config。调整后的代码如下:
// 先加载自定义配置 NLog.LogManager.LoadConfiguration("nlog.config"); // 再把NLog集成到LoggerFactory loggerFactory.AddNLog(); app.AddNLogWeb();
4. 补充排查小技巧
- 确认日志路径变量:检查
${logDirectory}变量是否在nlog.config里定义过,比如:
如果没定义,NLog可能会把日志写到当前目录下的<variable name="logDirectory" value="${basedir}/logs" />logDirectory文件夹里,你可以去对应路径确认是否有遗漏的日志文件。 - 开启NLog内部日志:在
nlog.config的根节点添加内部日志配置,能帮你看到NLog自身的运行细节,比如哪些日志被处理、哪些被过滤:<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogLevel="Trace" internalLogFile="${logDirectory}/nlog-internal.txt">
内容的提问来源于stack exchange,提问作者Seekeer
相关产品推荐
相关产品推荐

