You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:37:18