web-dev-qa-db-ja.com

Azure Function 2.xでHttpトリガー関数のコンストラクターを介して挿入されたILogger

ILoggerは、以下のTokenメソッドのように、関数パラメーターに注入できます。

ただし、コンストラクタパラメータlogに挿入すると、以下のエラーが発生しました。

[07/03/2019 17:15:17]実行された「トークン」(失敗、Id = 4e22b21f-97f0-4ab4-8f51-8651b 09aedc8)[07/03/2019 17:15:17] Microsoft.Extensions.DependencyInjection。抽象化:「関数」をアクティブにしようとしているときに、タイプ「Microsoft.Extensions.Logging.ILogger」のサービスを解決できません。

ILoggerは、以下のToken関数パラメーターに挿入できます。ただし、コンストラクタパラメータlogに挿入すると、上記のエラーが発生しました。

public class Functions
{
    private HttpClient _httpClient;
    private IAppSettings _appSettings;
    private ILogger _log;

    public Functions(HttpClient httpClient, IAppSettings appSettings  //working for these two
      , ILogger log  //not working, errors
    )
    {

        _log = log;
    }

    [FunctionName("Token")]
    public async Task<IActionResult> Token(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Token")]
        HttpRequest httpRequest,
        ILogger log)
    {

    }
}

以下の依存性注入

[Assembly: WebJobsStartup(typeof(Startup))]
namespace MyApp
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            builder.Services.AddHttpClient();
            builder.Services.AddTransient<IAppSettings, AppSettings>();     
             //builder.Services.AddLogging();  //not working
           //builder.Services.AddSingleton<ILogger>() //not working
        }
}

ビジュアルスタジオ2017

7
Pingpong

私も同じ問題を抱えていました。最終的に、この「logging」要素をHost.jsonファイルに追加すると、問題が解決することがわかりました。

{
    "version": "2.0",
    "logging": {
        "logLevel": {
            "default": "Trace"
        }
    }
}

これで、標準の.NETコアコンストラクターによって注入されたロガーメソッドが正常に機能します。

1
Mike Pennington