Azure Funtions でログレベルを Warning 以上にして Information ログが出力されないようにしてみた

Azure Functions のログ出力で「必要なログだけ」出力させたい場合、どうするのが良いのだろう。ローカルで開発しているときは、それなりの情報量のログ出力を確認したいが、Azure 環境下では必要なログだけにしたい。例えば、条件付きコンパイルで `#if Debug` を使ってログ出力を出し分けるとか。条件付きコンパイルがコードの色んなところにあると単純にコードが長くなってしまいます。そこで今回は、Azure 環境下でも出したいログは、Warning レベルにして Information ログが出力されないか試してみました。

## Azure Functions 検証環境を作成

```bash:bash
prefix=mnrfnlog
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az storage account create \
  --name ${prefix}stor \
  --resource-group ${prefix}-rg \
  --sku Standard_LRS

az functionapp create \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --consumption-plan-location $region \
  --runtime dotnet \
  --runtime-version 6 \
  --functions-version 4 \
  --storage-account ${prefix}stor \
  --https-only \
  --os-type Linux \
  --assign-identity
```

## Azure Functions 検証アプリを作成

```bash:bash
func init $prefix --dotnet

cd $prefix

func new --name Example --template HttpTrigger --authlevel anonymous

func start

curl http://localhost:7071/api/Example
```

ログ出力を確認

```txt
[2024-10-05T23:40:58.041Z] Executing 'Example' (Reason='This function was programmatically called via the host APIs.', Id=288594af-f60e-434c-9c56-bf5de5ed7ce6)
[2024-10-05T23:40:58.050Z] C# HTTP trigger function processed a request.
[2024-10-05T23:40:58.081Z] Executed 'Example' (Succeeded, Id=288594af-f60e-434c-9c56-bf5de5ed7ce6, Duration=47ms)
```

## Azure Functions にデプロイしてログ出力を確認

```bash:bash
func azure functionapp publish ${prefix}

curl https://$prefix.azurewebsites.net/api/example
```

![functions-logleve-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/bc5e1108-7371-ab27-6562-d211adf4f4df.png)

## アプリに Warning レベルのログを追加

適当なところで `name` 変数の出力を確認するコードを追加

```cs:Example.cs
log.LogWarning($"name={name}");
```

## アプリの動作確認

```bash:bash
func start

curl "http://localhost:7071/api/Example?name=test"
```

`name=test` が出力されていることを確認

```txt
[2024-10-05T23:49:00.294Z] Executing 'Example' (Reason='This function was programmatically called via the host APIs.', Id=8cb3d753-1a87-4563-87be-6a5978f160d7)
[2024-10-05T23:49:00.302Z] C# HTTP trigger function processed a request.
[2024-10-05T23:49:00.321Z] name=test
[2024-10-05T23:49:00.331Z] Executed 'Example' (Succeeded, Id=8cb3d753-1a87-4563-87be-6a5978f160d7, Duration=44ms)
```

## Azure Functions にデプロイして動作確認

```bash:bash
func azure functionapp publish ${prefix}

curl "https://$prefix.azurewebsites.net/api/example?name=Azure"
```

種類が Warning で `name=Azure` を確認

![functions-logleve-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/15596192-4366-edbc-a2ab-a71572b5901d.png)

## 環境変数でログレベルを Warning 以上に設定

```bash:bash
az functionapp config appsettings set \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --settings "AzureFunctionsJobHost__logging__logLevel__Function=Warning"
```

![functions-logleve-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/ecbd332f-6d05-ce90-b49b-a7002dd0da10.png)


## Warning レベルだけログ出力されることを確認

```bash:bash
curl "https://$prefix.azurewebsites.net/api/example?name=Warning"
```

![functions-logleve-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/80497913-7925-e195-e65a-05beca611382.png)

## 参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/configure-monitoring?tabs=v2