Reputation: 5972
I'm using FunctionsStartup
in an Azure Functions project to setup IoC bindings. However, any logs created from an injected ILogger<T>
aren't appearing when I run it in Azure.
I've created a very cutdown version with a brand new example project to demonstrate this...
https://github.com/dracan/AzureFunctionsLoggingIssue
The output of this is...
2020-04-03T20:20:35 Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds).
2020-04-03T20:20:54.643 [Information] Executing 'TestQueueTriggerFunction' (Reason='New queue message detected on 'myqueue'.', Id=2f13c4c7-8a35-4614-a768-1c3fecea8c31)
2020-04-03T20:20:54.654 [Information] Start of function (this log works)
2020-04-03T20:20:54.655 [Information] End of function (this log also works)
2020-04-03T20:20:54.655 [Information] Executed 'TestQueueTriggerFunction' (Succeeded, Id=2f13c4c7-8a35-4614-a768-1c3fecea8c31)
Note that the log entry "This log doesn't appear!" in MyClass.DoSomething()
doesn't appear.
Upvotes: 20
Views: 10211
Reputation: 2524
You just need to modify the host.json file
{
"version": "2.0",
"logging": {
"logLevel": {
"Some.Of.My.NameSpace": "Information"
},
"applicationInsights": {
...
}
}
}
Upvotes: 5
Reputation: 118
quick example below - use ILoggerFactory instead of ILogger<>
public class LoggingTests
{
ILogger _log;
public LoggingTests(ILoggerFactory loggerFactory)
{
_log = loggerFactory.CreateLogger(this.GetType());
}
[FunctionName("LoggingTests")]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log)
{
_log.LogInformation("LogInformation");
_log.LogWarning("LogWarning");
_log.LogDebug("LogDebug");
_log.LogTrace("LogTrace");
_log.LogError("LogError");
_log.LogCritical("LogCritical");
return new OkResult();
}
}
also check log level in host.json file
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Trace"
},
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
},
}
Upvotes: 2
Reputation: 5972
Looks like this is a known issue. To quote Microsoft's reply from Github:
This is another subtlety about how that console/debug log works in the portal. It only displays log messages if it knows they come from this function -- which means they match the category Function.{FunctionName}.User. The ILogger we pass in uses this category automatically but anything you log with an external logger will not use this. We do this so that you don't get flooded with background messages in this view -- and unfortunately it filters out your own custom logger as well.
I've got an issue tracking this with one potential workaround: Azure/azure-functions-host#4689 (comment).
Upvotes: 16