Log4j Spring Cloud 配置
此模块允许在 Spring Cloud Configuration 中有新版本可用时动态更新日志配置文件。
概述
Spring Boot 应用程序初始化日志 3 次。
- SpringApplication 声明一个记录器。此记录器将使用 Log4j 的“正常”机制初始化。因此,将检查名为 log4j2.configurationFile 的系统属性以查看是否提供了特定的配置文件,否则它将在类路径上搜索配置文件。该属性也可以在 log4j2.component.properties 中声明。
用法
指定监控间隔大于零的 Log4j 配置文件将使用轮询来确定配置是否已更新。如果监控间隔为零,则 Log4j 将监听来自 Spring Cloud Config 的通知,并在每次生成事件时检查配置更改。如果监控间隔小于零,则 Log4j 不会检查日志配置的更改。
在引用位于 Spring Cloud Config 中的配置时,应类似于以下方式引用配置
log4j.configurationFile=http://host.docker.internal:8888/ConfigService/sampleapp/default/master/log4j2.xml
Log4j 还支持复合配置。标准方法是将文件路径连接到逗号分隔的字符串中。不幸的是,Spring 会验证提供的 URL,并且不允许使用逗号。因此,必须将其他配置作为“覆盖”查询参数提供。
log4j.configurationFile=http://host.docker.internal:8888/ConfigService/sampleapp/default/master/log4j2.xml
?override=http://host.docker.internal:8888/ConfigService/sampleapp/default/master/log4j2-sampleapp.xml
请注意,目录结构中的位置以及配置文件的位置完全取决于 Spring Cloud Config 服务器中的 searchPaths 设置。
在 docker 容器中运行时,host.docker.internal 可用作域名来访问运行在同一主机上的应用程序,该应用程序位于 docker 容器之外。请注意,根据 Spring Cloud Config 的实践,但应用程序、配置文件和标签应在 url 中指定。
Spring Cloud Config 支持还允许使用 TLS 和/或基本身份验证进行连接。使用基本身份验证时,用户 ID 和密码可以作为系统属性、log4j2.component.properties 或 Spring Boot 的 bootstrap.yml 指定。下表显示了可用于指定属性的备用名称。任何替代方案都可以在任何配置位置使用。
属性 | 别名 | Spring 风格的别名 | 用途 |
---|---|---|---|
log4j2.configurationUserName | log4j2.config.username | logging.auth.username | 基本身份验证的用户名 |
log4j2.configurationPassword | log4j2.config.password | logging.auth.password | 基本身份验证的密码 |
log4j2.configurationAuthorizationEncoding | logging.auth.encoding | 基本身份验证的编码(默认为 UTF-8) | |
log4j2.configurationAuthorizationProvider | log4j2.config.authorizationProvider | logging.auth.authorizationProvider | 用于创建 HTTP 授权标头的类 |
log4j2.configurationUserName=guest
log4j2.configurationPassword=guest
如上所述,Log4j 支持从 bootstrap.yml 访问日志配置。例如,要配置使用基本授权从 Spring Cloud Configuration 服务读取,您可以执行以下操作
spring:
application:
name: myApp
cloud:
config:
uri: https://spring-configuration-server.mycorp.com
username: appuser
password: changeme
logging:
config: classpath:log4j2.xml
label: ${spring.cloud.config.label}
---
spring:
profiles: dev
logging:
config: https://spring-configuration-server.mycorp.com/myApp/default/${logging.label}/log4j2-dev.xml
auth:
username: appuser
password: changeme
请注意,Log4j 目前不支持直接加密密码。但是,Log4j 使用 Spring 的标准 API 来访问 Spring 配置中的属性,因此对 Spring 属性处理的任何自定义都将应用于 Log4j 使用的属性。
如果需要更广泛的身份验证,则可以实现 AuthorizationProvider
,并在 log4j2.authorizationProvider
系统属性中使用完全限定的类名,在 log4j2.component.properties 中或在 Spring 的 bootstrap.yml 中使用 log4j2.authorizationProvider
键或 logging.auth.authorizationProvider
键。
可以通过添加以下系统属性或在 log4j2.component.properties 中定义它们来启用 TLS
属性 | 可选或默认值 | 描述 |
---|---|---|
log4j2.trustStoreLocation | 可选 | 信任存储的位置。如果未提供,将使用默认信任存储。 |
log4j2.trustStorePassword | 可选 | 访问信任存储所需的密码。 |
log4j2.trustStorePasswordFile | 可选 | 包含信任存储密码的文件的位置。 |
log4j2.trustStorePasswordEnvironmentVariable | 可选 | 包含信任存储密码的环境变量的名称。 |
log4j2.trustStoreKeyStoreType | 如果提供了密钥库位置,则需要 | 密钥库的类型。 |
log4j2.trustStoreKeyManagerFactoryAlgorithm | 可选 | Java 密码算法。 |
log4j2.keyStoreLocation | 可选 | 密钥库的位置。如果未提供,将使用默认密钥库。 |
log4j2.keyStorePassword | 可选 | 访问密钥库所需的密码。 |
log4j2.keyStorePasswordFile | 可选 | 包含密钥库密码的文件的位置。 |
log4j2.keyStorePasswordEnvironmentVariable | 可选 | 包含密钥库密码的环境变量的名称。 |
log4j2.keyStoreType | 如果提供了信任存储位置,则需要。 | 密钥库的类型。 |
log4j2.keyStoreKeyManagerFactoryAlgorithm | 可选 | Java 密码算法。 |
log4j2.sslVerifyHostName | false | true 或 false |
要求
Log4j 2 Spring Cloud Configuration 集成依赖于 Log4j 2 API、Log4j 2 Core 和 Spring Cloud Configuration 版本 2.0.3.RELEASE 或 2.1.1.RELEASE 或更高版本,它是在这两个发行系列中的任何一个版本。有关更多信息,请参阅 运行时依赖项。