如何通过logback.xml从Jar包资源中为Google LoggingAppender提供凭据?
解决Jar包中加载Logback Google Cloud凭据的问题
核心问题
credentialsFile参数要求的是文件系统的绝对/相对路径,但打包后资源文件嵌入Jar包内,无法作为独立文件被访问,因此需要改用支持从classpath加载凭据的配置方式。
修改后的Logback配置
将原配置中的<credentialsFile>替换为<credentialsSource>组合配置,指定从classpath读取凭据文件:
<appender name="cloud" class="com.google.cloud.logging.logback.LoggingAppender"> <projectId>myproject</projectId> <!-- 替换credentialsFile,指定从classpath加载凭据的来源类型 --> <credentialsSource>com.google.cloud.logging.Logging$CredentialsSource.CLASSPATH</credentialsSource> <!-- 填写Jar包内的资源相对路径,对应原src/jvmMain/resources下的路径 --> <credentialsPath>secrets/logging-access.json</credentialsPath> <log>projects/myproject/logs/backend</log> <flushLevel>WARN</flushLevel> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender>
关键说明
credentialsSource指定为CLASSPATH类型,告知Appender从应用classpath中读取凭据资源credentialsPath为资源在classpath中的相对路径:原文件放在src/jvmMain/resources/secrets/下,打包后会直接位于classpath的secrets/目录下,因此路径写secrets/logging-access.json即可- 常规构建工具(Gradle/Maven)默认会将
src/jvmMain/resources下的文件打包到Jar的classpath根目录,无需额外配置
备选方案(环境变量/JVM参数)
如果不想在配置文件中硬编码路径,也可以通过启动参数传递:
- 启动应用时添加JVM参数:
-Dgoogle.application.credentials=classpath:secrets/logging-access.json,此时可保留原credentialsFile配置,但更推荐第一种classpath专属配置方式
内容的提问来源于stack exchange,提问作者Brian White
相关产品推荐
相关产品推荐

