我使用 springboot 的属性配置了 log4j2.yml:
Properties:
property:
- name: LOGSTASH_HOST
value: ${spring:logstash.server.host}
- name: LOGSTASH_PORT
value: ${spring:logstash.server.port}
- name: APPLICATION_NAME
value: ${lower:${spring:spring.application.name:-spring}}
如果我启动我的应用程序,我会收到一堆错误消息:
错误 StatusConsoleListener 解析器无法查找 spring:logstash.server.host java.lang.IllegalStateException:无法从 LoggerContext 获取 Spring 环境
和
错误 StatusConsoleListener 无法写入流 TCP:localhost:9800 用于附加器 LOGSTASH org.apache.logging.log4j.core.appender.AppenderLoggingException:写入 TCP 时出错:localhost:9800:套接字在 org.apache.logging.log4j.core.net.TcpSocketManager.write(TcpSocketManager.java:214) 不可用
直到 springboot 启动才找到服务器主机,这需要几秒钟,之后日志记录工作正常并且不再有错误消息。
如何将 log4J2 配置为在 springboot 启动之后或启动时启动,并且不发送垃圾邮件错误消息。
我尝试排除 springr boot starter 登录 pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
或者我尝试过后备主机和端口:
Properties:
property:
- name: LOGSTASH_HOST
value: "${sys:LOGSTASH_HOST:-${env:LOGSTASH_HOST:-localhost}}" # Prefer system property, then env variable, fallback to 'localhost'
- name: LOGSTASH_PORT
value: "${sys:LOGSTASH_PORT:-${env:LOGSTASH_PORT:-5044}}" # Prefer system property, then env variable, fallback to '5044'
- name: APPLICATION_NAME
value: "${sys:spring.application.name:-${env:spring_application_name:-default-application}}" # System property, env variable, fallback
尝试将 log4j2.yml 文件重命名为 log4j2-spring.yml 这是自 3.0.0 以来文档中描述的一种可能性:https://docs.spring.io/spring-boot/docs/3.2.4/reference/html/features.html#features.logging.log4j2-extensions
由于标准的log4j2.xml配置文件加载得太早,因此无法在其中使用扩展。您需要使用 log4j2-spring.xml 或定义logging.config属性。