Reputation: 2035
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
Reputation: 16156
Did I misunderstand in some place... ? Although I don't know the reason, but I think I can share my test result:
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
Meterials I referred to: https://stackoverflow.com/a/55049930
Upvotes: 1