NLog.Web.AspNetCore仅输出日志至单个文件问题求助
NLog仅输出到allfile日志文件的问题解决
问题原因
你的NLog规则配置存在匹配范围限制:
exceptions日志目标对应的规则仅针对kurs_ASP_dotNET___Restaurant_API.Controllers.*命名空间生效- 但实际日志是从
kurs_ASP_dotNET___Restaurant_API.Services.RestaurantService输出的,命名空间不匹配,导致日志无法写入exceptions目标文件
解决方案
根据需求选择以下任意一种方式修改nlog.config中的<rules>节点:
方式一:让Services命名空间的Error日志写入exceptions文件
添加针对Services命名空间的规则,确保RestaurantService的Error日志被匹配:
<rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!-- 匹配Controllers下的Error日志 --> <logger name="kurs_ASP_dotNET___Restaurant_API.Controllers.*" minlevel="Error" writeTo="exceptions" /> <!-- 新增:匹配Services下的Error日志 --> <logger name="kurs_ASP_dotNET___Restaurant_API.Services.*" minlevel="Error" writeTo="exceptions" /> <logger name="kurs_ASP_dotNET___Restaurant_API.Middleware.RequestTimeMiddleware" minlevel="Trace" writeTo="request-time" /> </rules>
方式二:让所有Error级别的日志都写入exceptions文件
如果希望全局所有Error及以上级别的日志都进入exceptions文件,直接将规则的匹配范围改为全局:
<rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!-- 匹配所有Error级别的日志 --> <logger name="*" minlevel="Error" writeTo="exceptions" /> <logger name="kurs_ASP_dotNET___Restaurant_API.Middleware.RequestTimeMiddleware" minlevel="Trace" writeTo="request-time" /> </rules>
额外说明
NLog规则默认按顺序执行,且允许同一条日志写入多个目标(即final="false"),所以修改后Error日志会同时出现在allfile和exceptions文件中,符合常规日志记录需求。
内容的提问来源于stack exchange,提问作者Miłosz Wiśniewski
相关产品推荐
相关产品推荐

