Azure功能-未显示注入的ILogger< T>日志

i7uq4tfw  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(125)

我在Azure Functions项目中使用FunctionsStartup来设置IoC绑定。但是,当我在Azure中运行ILogger<T>时,从注入的ILogger<T>创建的任何日志都不显示。
我已经创建了一个非常精简的版本与一个全新的示例项目来演示这一点...
https://github.com/dracan/AzureFunctionsLoggingIssue
此操作的输出是...

2020-04-03T20:20:35  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds). 
2020-04-03T20:20:54.643 [Information] Executing 'TestQueueTriggerFunction' (Reason='New queue message detected on 'myqueue'.', Id=2f13c4c7-8a35-4614-a768-1c3fecea8c31)
2020-04-03T20:20:54.654 [Information] Start of function (this log works)
2020-04-03T20:20:54.655 [Information] End of function (this log also works)
2020-04-03T20:20:54.655 [Information] Executed 'TestQueueTriggerFunction' (Succeeded, Id=2f13c4c7-8a35-4614-a768-1c3fecea8c31)

请注意,MyClass.DoSomething()中的日志条目 “This log doesn 't appear!" 不会出现。

vpfxa7rd

vpfxa7rd1#

看起来这是一个已知的问题。引用微软从Github的回复:
这是关于控制台/调试日志如何在门户中工作的另一个微妙之处。它只显示来自此函数的日志消息--这意味着它们匹配类别Function.{FunctionName}. User。我们传入的ILogger自动使用此类别,但使用外部日志记录器记录的任何内容都不会使用此类别。我们这样做是为了避免在此视图中被大量的背景消息淹没--而且不幸的是,它还过滤掉了您自己的自定义记录器。
我遇到了一个跟踪问题,有一个可能的解决方法:Azure/Azure功能主机#4689(注解)。

57hvy0tb

57hvy0tb2#

下面是一个快速示例-使用ILoggerFactory而不是ILogger〈〉

public class LoggingTests
{
    ILogger _log;
    public LoggingTests(ILoggerFactory loggerFactory)
    {
        _log = loggerFactory.CreateLogger(this.GetType());
    }

    [FunctionName("LoggingTests")]
    public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log)
    {
        _log.LogInformation("LogInformation");
        _log.LogWarning("LogWarning");
        _log.LogDebug("LogDebug");
        _log.LogTrace("LogTrace");
        _log.LogError("LogError");
        _log.LogCritical("LogCritical");

        return new OkResult();
    }
}

同时检查***host.json***文件中日志级别

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "default": "Trace"
    },
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  },
}
kknvjkwl

kknvjkwl3#

只需修改host.json文件

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "Some.Of.My.NameSpace": "Information"
    },
    "applicationInsights": {
      ...
    }
  }
}

来源:https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#iloggert-and-iloggerfactory

相关问题