Azure Storage Blob にログを出力する log4j2用のカスタムアペンダーです。ストレージアカウントやキーをなどを直接指定する方法と、Azure App Service (WebApps) のアプリケーション診断ログを利用する方法があります。
重要 2024/03
マネージドIDに対応しました。内部的に DefaultAzureCredential
を利用しています。
更新 2024/03
- 依存ライブラリの更新
- JDKバージョンを8から11に変更しました
重要 2022/4/28
ツール内部で利用している Azure SDK BLOBのバージョンを、V8系からV12系にアップデートしました。特にインタフェースに変更はありません。
それとともにツールバージョンを、V2系にしました。
AApp Service には、アプリ診断ログ機能がありますが、これは .NET アプリケーションでのみ有効で、Javaから利用できませんが、これを解決することができます。ただし実行環境がWindowsの場合のみです。
アプリの診断ログの有効化 - Azure App Service | Microsoft Docs
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
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 version="1.0" encoding="UTF-8"?>
<Configuration status="info">
<Appenders>
<AzureBlobAppender name="azureblob" webapps="true">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</AzureBlobAppender>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="azureblob" />
</Root>
</Loggers>
</Configuration>
一般モード
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
<Appenders>
<AzureBlobAppender name="azureblob"
accountName="<<yourstorageaccount>>>"
accountKey="<<yourstorageaccountkey>>"
containerName="<<yourblobstoragecontainername>>"
containerUri="<<yourblobstoragecontaineruri>>"
prefix1="${sys:COMPUTERNAME}"
prefix2="foobar">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</AzureBlobAppender>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="azureblob" />
</Root>
</Loggers>
</Configuration>
test/resources/azureconfig.json
に値を設定すること。
以上