Tessaract
Tessaract

Reputation: 2035

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

I have an Azure Function type project in Visual Studio.

This is my Startup:

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

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

and this is my function:

    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}");
    }

Here log information is written to the console, but in my "TestLog" method (ignore that it looks static, it isn't I just skipped some code):

public class TestClass
{
    readonly ILogger logger;

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

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

But this produces nothing on the console.
I tried switching "ILogger" for an "ILoggerFactory" like so:

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

But to no avail.

How can I get the logger that is logging to the console while I am debugging my function?

Upvotes: 0

Views: 321

Answers (1)

Tiny Wang
Tiny Wang

Reputation: 16156

Did I misunderstand in some place... ? Although I don't know the reason, but I think I can share my test result:

enter image description here

My test 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);
        }
    }
}

And host.json

enter image description here

Meterials I referred to: https://stackoverflow.com/a/55049930

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

Upvotes: 1

Related Questions