Log4j Spring Cloud 配置

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

Overview

Spring Boot 应用程序初始化日志记录 3 次。 1. SpringApplication 声明一个 Logger。将使用 Log4j 的“常规”机制初始化此 Logger。因此,将检查名为 log4j2.configurationFile 的系统属性,以查看是否提供了特定的配置文件,否则它将在 Classpath 上搜索配置文件。该属性也可以在 log4j2.component.properties 中声明。

Usage

指定监视间隔大于零的 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 和/或基本身份验证进行连接。使用基本身份验证时,可以将用户标识和密码指定为系统属性,log4j2.component.properties 或 Spring Boot 的 bootstrap.yml。下表显示了可用于指定属性的备用名称。任何替代方案都可以在任何配置位置中使用。

Property Alias Spring-like alias Purpose
log4j2.configurationUserName log4j2.config.username logging.auth.username 基本认证的用户名
log4j2.configurationPassword log4j2.config.password logging.auth.password 基本认证密码
log4j2.authorizationProvider log4j2.config.authorizationProvider logging.auth.authorizationProvider 用于创建 HTTP 授权 Headers 的类
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 所使用的属性。

如果需要更广泛的身份验证,则可以使用 log4j2.authorizationProvider 密钥或键日志记录来实现 AuthorizationProvider,并在 log4j2.authorizationProvider 系统属性,log4j2.component.properties 或 Spring 的 bootstrap.yml 中实现标准类名。 auth.authorizationProvider。

可以通过添加以下系统属性或在 log4j2.component.properties 中定义它们来启用 TLS

Property 可选或默认值 Description
log4j2.trustStoreLocation Optional 信任库的位置。如果未提供,将使用默认信任库。
log4j2.trustStorePassword Optional 访问信任库所需的密码。
log4j2.trustStorePasswordFile Optional 包含信任存储区密码的文件的位置。
log4j2.trustStorePasswordEnvironmentVariable Optional 包含信任库密码的环境变量的名称。
log4j2.trustStoreKeyStoreType 如果提供了密钥库位置,则为必需 密钥库的类型。
log4j2.trustStoreKeyManagerFactoryAlgorithm Optional Java 加密算法。
log4j2.keyStoreLocation Optional 密钥库的位置。如果未提供,将使用默认密钥库。
log4j2.keyStorePassword Optional 访问密钥库所需的密码。
log4j2.keyStorePasswordFile Optional 包含密钥存储区密码的文件的位置。
log4j2.keyStorePasswordEnvironmentVariable Optional 包含密钥库密码的环境变量的名称。
log4j2.keyStoreType 如果提供了信任库位置,则为必需。 密钥库的类型。
log4j2.keyStoreKeyManagerFactoryAlgorithm Optional Java 加密算法。
log4j2.sslVerifyHostName false 对或错

Requirements

Log4j 2 Spring Cloud Configuration 集成对 Log4j 2 API,Log4j 2 Core 和 Spring Cloud Configuration 版本 2.0.3.RELEASE 或 2.1.1.RELEASE 或更高版本的依赖关系。有关更多信息,请参见Runtime Dependencies

首页