Azure Function V3を使用して、既存のIloggerを新しいクラスファイルに挿入するにはどうすればよいですか?

Nov 27 2020

VS2019を使用して、新しいAzure関数V3、CORE3.1を作成しました。基本的なHTTPTriggerを使用します。新しいクラスファイルを作成し、既存のIloggerをそのファイルに挿入したいと思います。これはどのように達成できますか?私はこれに不慣れなので、どんな助けもいただければ幸いです。

編集:

それで最終的にこれを理解し、問題を複雑にしすぎました。V3関数はすでにILoggerでログを記録するように構成されています。この投稿によると、関数で始まらないカテゴリで作成されたログを除外するバグがあります:DI経由で提供されるILoggerインスタンスを使用できません

私がする必要があるのは、次のようにロガーをクラスに注入することだけでした。

private readonly ILogger _logger;

        public ClassName(ILogger<ClassName> logger)
        {
            _logger = logger;
        }

それからちょうどそれを次のように呼びました:

_logger.LogInformation("Log Message");

上記の投稿のオプション1を使用して、名前空間をhost.jsonファイルに追加しました。

"logLevel": {
      "NamespaceName": "Information"
    }

回答

1 knowonecanknow Nov 27 2020 at 05:22

App Insightsにログを書き込む関数があり、ILoggerを使用しています。

他のサービス/ヘルパークラスの依存性注入でこのようなILoggerを使用できます。

public interface IExampleClass
{
    void ExampleMethod();
}

public class ExampleClass : IExampleClass
{
    private readonly ILogger<ExampleClass> _logger;

    public ExampleClass(ILogger<ExampleClass> logger)
    {
        _logger = logger;
    }

    public void ExampleMethod()
    {
       _logger.LogInformation("Example info log");
    }
}

スタートアップファイルへのログインを有効にして、DIを登録します。

class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddLogging();
        builder.Services.AddTransient<ExampleClass, IExampleClass>();
    }
}

これはメインクラスによって呼び出すことができます。

public class ThisIsAnAzureFunction
{
    private readonly IExampleClass _exampleClass;

    public ThisIsAnAzureFunction(IExampleClass exampleClass)
    {
        _exampleClass = exampleClass;
    }

    [FunctionName("SomeAzureFunctionName")]
    public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
        try
        {
            //Try some stuff
        }
        catch (Exception exception)
        {
            //Log some stuff
            log.LogError(exception);
            throw;
        }
    }
}