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
相关产品推荐
相关产品推荐

