Capturing and logging errors is critical to monitoring the health of your Azure Functions application.
Each catch
block inside an Azure Function should log helpful details about the failure. Moreover, the logging should not be done at
Debug
or Trace
level.
Consider using the built-in integration with Application Insights for better monitoring of your Application.
Noncompliant code example
[FunctionName("Foo")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
try
{
// do stuff that can fail
}
catch (Exception ex)
{
// the failure is not logged at all OR is logged at DEBUG/TRACE level
}
}
Compliant solution
[FunctionName("Foo")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
try
{
// do stuff that can fail
}
catch (Exception ex)
{
log.LogError(ex, "Give details that will help investigations");
}
}