.Net Azure Function 项目 - 如何获取对 ILogger 的引用,写入控制台?

.Net Azure Function project - How to get reference to the ILogger, writing to the console?

我在 Visual Studio 中有一个 Azure Function 类型的项目。

这是我的创业公司:

    public override void Configure(IFunctionsHostBuilder builder)
    {
        IConfiguration configuration = builder.GetContext().Configuration;
        string connectionString = configuration.GetConnectionString("default");

        builder.Services.AddLogging();
        builder.Services.AddTransient<TestClass>();
    }

这是我的职能:

    readonly TestClass testClass;

    public TestFunc(TestClass testClass)
    {
        this.testClass = testClass;
    }

    [FunctionName("TestFunc")]
    public async System.Threading.Tasks.Task Run([TimerTrigger("0 */99 * * * *"
#if DEBUG
, RunOnStartup = true
#endif
)]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function started.");

        testClass.TestLog();

        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    }

这里日志信息是写到控制台的,但是在我的“TestLog”方法中(忽略它看起来是静态的,不是我只是跳过了一些代码):

public class TestClass
{
    readonly ILogger logger;

    public TestClass(ILogger logger)
    {
        this.logger = logger;
        logger.LogError("asd");
    }

    internal void TestLog()
    {
        logger.LogInformation("test");
    }
}

但这不会在控制台上产生任何结果。
我尝试将“ILogger”切换为“ILoggerFactory”,如下所示:

    public TestClass(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<TaskSynchronisation>();
        logger.LogError("asd");
    }

但是没有用。

如何在调试函数时获取正在记录到控制台的记录器?

我是不是在某些地方误解了...?虽然我不知道原因,但我想我可以分享我的测试结果:

我的测试class:

using Microsoft.Extensions.Logging;

namespace FunctionApp1
{
    public interface ICommonUtil
    {
        public string easyTest(string param);
    }

    public class CommonUtil : ICommonUtil
    {
        private readonly ILogger _logger;

        public CommonUtil(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger("CommonUtil");
        }

        public string easyTest(string param)
        {
            _logger.LogWarning("this is easy test");
            return param + "asdf";
        }
    }
}

Startup.cs:

using FunctionApp1;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(Startup))]
namespace FunctionApp1
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddLogging();
            builder.Services.AddSingleton<ICommonUtil, CommonUtil>();
        }
    }
}

function.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

namespace FunctionApp1
{
    public  class Function1
    {
        private ICommonUtil _util;

        public Function1(ICommonUtil util)
        {
            this._util = util;
        }

        [FunctionName("Function1")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            string name = req.Query["name"];
            name = _util.easyTest(name);

            return new OkObjectResult(name);
        }
    }
}

和host.json

我参考的资料:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#registering-services