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

Azure Function App构造注入ILogger<TCategoryName>日志输出位置问题

核心原因

构造函数注入的ILogger<TCategoryName>日志未输出,是配置和写法问题共同导致的:

  • 方法参数注入的methodLog是Azure Functions运行时内置的特殊注入实例,日志分类固定为Function.TestLog,默认放行Information级别日志,所以可以直接输出到控制台。
  • 构造函数注入的是ILogger<TestProcessor>,日志分类为TestProcessor,不属于Functions运行时默认放行的日志分类范围;同时当前host.json没有配置自定义分类的日志过滤规则,默认规则下自定义分类的Information级别日志会被直接拦截,不会写入控制台、Application Insights等任何输出目标,不存在写到其他未知位置的情况。
  • 额外写法问题:Function类名为Test,但注入ILogger时使用的泛型参数是TestProcessor,分类和实际类不匹配,也会增加日志规则配置的复杂度。
修复方案
  • 修正构造函数的ILogger泛型参数,和当前Function类保持一致,修正后的代码如下:
namespace myNamespace {
    public class Test {
        private readonly ILogger _Constructorlog;
         // 泛型参数改为当前类Test,不要用不匹配的TestProcessor
         public Test(ILogger<Test> logger) {
            _Constructorlog = logger;
        }

        [FunctionName("TestLog")]
        public async Task<IActionResult> RunWeb([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger methodLog) {
            methodLog.LogInformation("method log");
            _Constructorlog.LogInformation("Constructor log");
        }
    }
}
  • 补全host.json的日志过滤配置,显式开启自定义命名空间/分类的Information级别日志输出,修正后的配置如下:
{
    "version": "2.0",
    "logging": {
        "logLevel": {
            "Default": "Warning",
            "myNamespace": "Information"
        },
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            }
        }
    }
}

配置完成重启Function App后,构造函数注入的ILogger输出的日志就会正常出现在控制台和绑定的Application Insights中。

内容的提问来源于stack exchange,提问作者Glyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:18:22