Skip to content

Latest commit

 

History

History
142 lines (96 loc) · 5.86 KB

README.ja.md

File metadata and controls

142 lines (96 loc) · 5.86 KB

Azure Blob Appender

Apache License, Version 2.0, January 2004 Maven Central

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

What's New

重要 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

仕組み

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 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 に値を設定すること。

以上