Log4j Spring Cloud 配置

此模块允许在 Spring Cloud Configuration 中有新版本可用时动态更新日志配置文件。

概述

Spring Boot 应用程序初始化日志 3 次。

  1. 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 或更高版本,它是在这两个发行系列中的任何一个版本。有关更多信息,请参阅 运行时依赖项