Logback を使用してカスタム永続ストレージにログを書き込む方法

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Java ❌ C#

この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise

この記事では、Logback を読み込んで、Azure Spring Apps 内のカスタム永続ストレージにログを書き込む方法について説明します。

Note

次の名前のいずれかを持つファイルがアプリケーションのクラスパス内にある場合、それは Spring Boot によって Logback の既定の構成に自動的に読み込まれます。

  • logback-spring.xml
  • logback.xml
  • logback-spring.groovy
  • logback.groovy

前提条件

ログを特定のパスに書き込むように Logback 構成を編集する

logback-spring.xml サンプル ファイルを使用すれば、ログの書き込み先とするパスを設定できます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <!-- please feel free to customize the log layout -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 'LOGS' here is a value to be read from the application's environment variable -->
        <file>${LOGS}/spring-boot-logger.log</file>
        <!-- please feel free to customize the log layout pattern -->
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily and when the file reaches 10 MegaBytes -->
            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- LOG everything at the INFO level -->
    <root level="info">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>

    <!-- LOG "com.baeldung*" at the TRACE level -->
    <logger name="com.baeldung" level="trace" additivity="false">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </logger>

</configuration>

前の例では、アプリケーションのログの書き込み先とするパスに {LOGS} という名前のプレースホルダーが 2 つあります。 コンソールとご利用の永続ストレージの両方にログが書き込まれるようにするには、環境変数 LOGS に値を割り当てる必要があります。

Azure CLI を使用して永続ストレージ上の Logback を使用する新規アプリを作成し、デプロイする

  1. 次のコマンドを使用すれば、永続的なストレージを有効にし、環境変数を設定して、Azure Spring Apps 内にアプリケーションを作成することができます。

    az spring app create \
         --resource-group <resource-group-name> \
         --name <app-name> \
         --service <spring-instance-name> \
         --persistent-storage <path-to-json-file> \
         --env LOGS=/byos/logs
    

    Note

    LOGS 環境変数の値は、mountPath またはそのサブディレクトリと同じにすることができます。

    create コマンド内の --persistent-storage パラメーターに渡される JSON ファイルの例を次に示します。 この例では、上記の CLI コマンド内の環境変数と下記の mountPath プロパティで、同じ値が渡されます。

    {
        "customPersistentDisks": [
            {
                "storageName": "<Storage-Resource-Name>",
                "customPersistentDiskProperties": {
                    "type": "AzureFileVolume",
                    "shareName": "<Azure-File-Share-Name>",
                    "mountPath": "/byos/logs",
                    "readOnly": false
                }
            }
        ]
    }
    
  2. 次のコマンドを使用して、ご利用のアプリケーションをデプロイします。

    az spring app deploy \
         --resource-group <resource-group-name> \
         --name <app-name> \
         --service <spring-instance-name> \
         --artifact-path <path-to-jar-file>
    
  3. 次のコマンドを使用して、そのアプリケーションのコンソール ログを確認します。

    az spring app logs \
         --resource-group <resource-group-name> \
         --name <app-name> \
         --service <spring-instance-name>
    

    バインドした Azure Storage アカウント リソースにアクセスし、永続ストレージとしてアタッチされた Azure ファイル共有を見つけます。 この例では、ご利用の Azure ファイル共有のルートにある spring-boot-logger.log ファイルにログが書き込まれます。 ローテーションされたログ ファイルはすべて、その Azure ファイル共有内の /archived フォルダーに格納されます。

  4. 必要に応じて、次のコマンドを使用して、既存のアプリのパスまたは永続ストレージを更新します。

    ログの保存先となるパスや永続ストレージは、いつでも変更できます。 環境変数または永続ストレージのいずれかに変更が加えられると、アプリケーションが再起動します。

    az spring app update \
         --resource-group <resource-group-name> \
         --name <app-name> \
         --service <spring-instance-name> \
         --persistent-storage <path-to-new-json-file> \
         --env LOGS=<new-path>
    

次のステップ