Azure / Azure/azure-functions-java-worker

Application of logging severity is inconsistent with documentation

Open
#674 1 comment 0 reactions 1 assignee Claimed by @kamperiadis View on GitHub
area:java-functions Bug Documentation reviewed
Dominant language
Java
Stars
103
Forks
74
Avg merge
4d 8h
Merged PRs (30d)
2

Description

We are using the App Settings dialog to manage log levels for Azure Functions. According to https://learn.microsoft.com/en-us/azure/azure-functions/configure-monitoring?tabs=v2#configure-categories, the Host.Results setting controls logging of entries to the requests table. However, with version 4.13 of the runtime, having
AzureFunctionsJobHost__logging__logLevel__default = Warning
AzureFunctionsJobHost__logging__logLevel__Host__Results = Information
results in no request information being received by the requests table.

#### Investigative information

Please provide the following:

- Timestamp: 2022-11-01T00:16:54.2729718Z
- Function App name: com-foo-bar-20220830131408475
- Function name(s) (as appropriate): Functions.HttpExample
- Invocation ID: a8ac4748-f1c7-4a45-ac24-9b2fc92b7d9b
- Region: West US

#### Repro steps

Provide the steps required to reproduce the problem:

Configure the function with the following App Settings
{
"name": "AzureFunctionsJobHost__logging__logLevel__default",
"value": "Warning",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Function",
"value": "Information",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Function.HttpExample",
"value": "Information",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Function.HttpExample.User",
"value": "Warning",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Host__Aggregator",
"value": "Information",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Host__Results",
"value": "Information",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Microsoft",
"value": "Warning",
"slotSetting": false
},
{
"name": "AzureFunctionsJobHost__logging__logLevel__Worker",
"value": "Warning",
"slotSetting": false
},

#### Expected behavior

When the function is triggered, an entry should appear in the Application Insights requests table.

#### Actual behavior

No entry appears in the requests table.

#### Known workarounds
Changing this setting to Information will result in the entry appearing in the Request table
{
"name": "AzureFunctionsJobHost__logging__logLevel__default",
"value": "Information",
"slotSetting": false
},

#### Related information

Provide any related information

* Programming language: Java

Source

```java
package org.example.functions;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import lombok.extern.slf4j.Slf4j;

import java.util.Optional;

/**
* Azure Functions with HTTP Trigger.
*/
@Slf4j
public class HttpTriggerFunction {
/**
* This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" {your host}/api/HttpExample
* 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
*/
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage> request,
final ExecutionContext context) {
context.getLogger().info("2 Java HTTP trigger processed a request.");

// Parse query parameter
final String query = request.getQueryParameters().get("name");
final String name = request.getBody().orElse(query);

log.error("Error Log");
log.warn("Warning Log");
log.info("Info Log");
log.debug("Debug Log");
log.trace("Trace Log");

if (name == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
} else {
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.