如何使用 Logback 将日志写入到自定义持久性存储
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何加载 Logback 并将日志写入到 Azure Spring Apps 中的自定义持久性存储。
注意
当应用程序的类路径中的文件具有以下名称之一时,Spring Boot 将通过 Logback 的默认配置自动加载该文件:
- logback-spring.xml
- logback.xml
- logback-spring.groovy
- logback.groovy
先决条件
- 绑定到 Azure Spring Apps 实例的现有存储资源。 如果需要绑定存储资源,请参阅如何在 Azure Spring Apps 中启用你自己的持久性存储。
- 应用程序中包含的 Logback 依赖项。 有关 Logback 的详细信息,请参阅 Logback 指南。
- 用于 Azure CLI 的 Azure Spring Apps 扩展
编辑 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}
的占位符,用于将应用程序的日志写入其中。 需要为环境变量 LOGS
分配一个值,才能将日志写入控制台和持久性存储。
使用 Azure CLI 在持久存储上通过 Logback 创建和部署新应用
使用以下命令在启用了持久性存储并设置了环境变量的 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
注意
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 } } ] }
使用以下命令部署应用程序:
az spring app deploy \ --resource-group <resource-group-name> \ --name <app-name> \ --service <spring-instance-name> \ --artifact-path <path-to-jar-file>
使用以下命令检查应用程序的控制台日志:
az spring app logs \ --resource-group <resource-group-name> \ --name <app-name> \ --service <spring-instance-name>
转到绑定的 Azure 存储帐户资源,找到附加为持久性存储的 Azure 文件共享。 本示例将日志写入 Azure 文件共享根目录中的 spring-boot-logger.log 文件。 所有旋转的日志文件都将存储在 Azure 文件共享的 /archived 文件夹中。
(可选)使用以下命令更新现有应用的路径或持久性存储:
保存日志的路径或持久性存储可以随时更改。 对环境变量或持久性存储进行更改时,应用程序会重启。
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>