An open API service indexing awesome lists of open source software.

https://github.com/m-moris/log4j2-azure-blob-appender

Azure Blob Appender for Log4j2
https://github.com/m-moris/log4j2-azure-blob-appender

azure blob log4j2

Last synced: 6 months ago
JSON representation

Azure Blob Appender for Log4j2

Awesome Lists containing this project

README

          

# Azure Blob Appender

[![Apache License, Version 2.0, January 2004](https://img.shields.io/github/license/apache/maven.svg?label=License)](https://www.apache.org/licenses/LICENSE-2.0.txt)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.m-moris/log4j2-azure-blob-appender)](https://search.maven.org/search?q=a:log4j2-azure-blob-appender)

Azure Storage Blob にログを出力する log4j2用のカスタムアペンダーです。ストレージアカウントやキーをなどを直接指定する方法と、Azure App Service (WebApps) のアプリケーション診断ログを利用する方法があります。

## What's New

** 2025/02 **

依存ライブラリのバージョンを更新しました

**重要 2024/03**

マネージドIDに対応しました。内部的に `DefaultAzureCredential` を利用しています。

**更新 2024/03**

- 依存ライブラリの更新
- JDKバージョンを8から11に変更しました

**重要 2022/4/28**

ツール内部で利用している Azure SDK BLOBのバージョンを、V8系からV12系にアップデートしました。特にインタフェースに変更はありません。

それとともにツールバージョンを、V2系にしました。

## WebAppsモード

AApp Service には、アプリ診断ログ機能がありますが、これは .NET アプリケーションでのみ有効で、Javaから利用できませんが、これを解決することができます。ただし実行環境がWindowsの場合のみです。

[アプリの診断ログの有効化 - Azure App Service | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/app-service/troubleshoot-diagnostic-logs)

### 仕組み

App Service のアプリ診断ログを有効にすると、`DIAGNOSTICS_AZUREBLOBCONTAINERSASURL` 環境変数にSAS付きのStorage URLが設定されます。Azure Blob Appender はこのBLOBに追記するようにログを出力します。

参照する環境変数は以下の通りです、逆に言えば以下の環境変数が設定されていれば利用できます。

* `DIAGNOSTICS_AZUREBLOBCONTAINERSASURL`
* `WEBSITE_SITE_NAME`
* `WEBSITE_INSTANCE_ID`

Linux ベースの WebAppsには、アプリ診断ログ機能が用意されていないので利用できませんが。ただし、該当の環境変数を設定しておけば、動作すると思います。

## 一般モード

構成ファイルにストレージアカウントやキーを直接指定する方法です。

### 設定すべき項目

設定すべき項目は以下の通りです。後述するディレクトリ構造で出力するためPrefix1/Prefix2の指定が必要です。

ストレージキーで認証を利用する場合は以下の3つの値が必要です。

* ストレージアカウント
* ストレージアカウントキー
* コンテナ名

マネージドIDで認証を利用する場合は以下の1つの値が必要です。

* コンテナ名を含むBLOB URI (例 `https://{your-storage-account-name}.blob.core.windows.net/logs`)

階層を指定するための2つの値が必要です。

* Prefix1
* Prefix2

## BLOBのディレクトリ

WebAppsモードでは、 .NET アプリの診断ログと同じ構造で出力します。

`{WEBSITE_SITE_NAME}/yyyy/mm/dd/HH/{WEBSITE_INSTANCE_ID}_applicationLog.txt`

一般モードでは以下となります。

`{Prefix1}/yyyy/mm/dd/HH/{Prefix2}_applicationLog.txt`

log4j2の構成ファイルでは環境変数を参照できるので、実行する環境に適切な値を設定できます。

## 構成ファイル

設定する属性は以下の通り。

| 属性 | 型 | 意味 |
| ------------- | ------- | ---------------------------------------------------------------------- |
| webapps | boolean | `true`ならWebAppsモードで、以下の設定は無視される。デフォルトは`false` |
| accountName | string | ストレージアカウント名。webappsが`false`なら有効 |
| accountKey | string | ストレージアカウントキー。同上 |
| containerName | string | BLOBコンテナの名前。同上 |
| containerUri | string | BLOBコンテナのURI。同上 |
| prefix1 | string | Prefix1。同上 |
| prefix2 | string | Prefix2。同上 |

containerUriが優先される。

### 定義のサンプル

WebAppsモード
```xml










```

一般モード

```xml










```

## テスト

`test/resources/azureconfig.json` に値を設定すること。

以上