You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus应用配置多Logstash日志输出及按Profile切换方案咨询

可行实现方案

方案一:基于Quarkus Logging GELF扩展实现多Logstash输出+Profile切换

Quarkus的GELF扩展支持配置多个独立的GELF handler实例,并非只能单主机。通过Profile前缀控制不同环境的输出行为:

  1. 添加依赖(pom.xml)
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-logging-gelf</artifactId>
</dependency>
  1. 在application.properties中配置多环境日志规则
# 通用日志级别配置
quarkus.log.level=INFO

# Dev环境:仅启用控制台输出,禁用所有GELF handler
%dev.quarkus.log.handler.console.enabled=true
%dev.quarkus.log.handler.gelf.*.enabled=false

# Prod环境:禁用控制台,启用多个Logstash对应的GELF handler
%prod.quarkus.log.handler.console.enabled=false

# 第一个Logstash实例配置
%prod.quarkus.log.handler.gelf.logstash1.enabled=true
%prod.quarkus.log.handler.gelf.logstash1.host=logstash-host-01
%prod.quarkus.log.handler.gelf.logstash1.port=12201
%prod.quarkus.log.handler.gelf.logstash1.protocol=UDP
%prod.quarkus.log.handler.gelf.logstash1.additional-field.app-id=my-quarkus-service

# 第二个Logstash实例配置
%prod.quarkus.log.handler.gelf.logstash2.enabled=true
%prod.quarkus.log.handler.gelf.logstash2.host=logstash-host-02
%prod.quarkus.log.handler.gelf.logstash2.port=12201
%prod.quarkus.log.handler.gelf.logstash2.protocol=TCP
%prod.quarkus.log.handler.gelf.logstash2.additional-field.app-id=my-quarkus-service

每个GELF handler通过gelf.xxx的前缀区分,独立配置目标Logstash主机、协议等参数。


方案二:基于quarkus-logging-logback扩展实现Profile专属配置文件

若需要更复杂的日志格式化规则,可使用Logback扩展,通过Quarkus专属属性指定Profile对应的配置文件(之前无效是因为用了标准Logback属性而非Quarkus的Profile前缀属性):

  1. 添加依赖(pom.xml)
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-logging-logback</artifactId>
</dependency>
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
</dependency>
  1. 创建Profile专属Logback配置文件
    在src/main/resources下创建三个文件:
  • logback.xml:基础空配置(可选,作为 fallback)
  • logback-dev.xml:Dev环境仅输出到控制台
<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>
  • logback-prod.xml:Prod环境输出到多个Logstash
<configuration>
    <!-- 第一个Logstash实例 -->
    <appender name="LOGSTASH1" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>logstash-host-01:5000</destination>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp/>
                <level/>
                <loggerName/>
                <message/>
                <stackTrace/>
                <mdc/>
            </providers>
        </encoder>
    </appender>
    <!-- 第二个Logstash实例 -->
    <appender name="LOGSTASH2" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>logstash-host-02:5000</destination>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp/>
                <level/>
                <loggerName/>
                <message/>
                <stackTrace/>
                <mdc/>
            </providers>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH1"/>
        <appender-ref ref="LOGSTASH2"/>
    </root>
</configuration>
  1. 在application.properties中绑定Profile与配置文件
# Dev环境加载logback-dev.xml
%dev.quarkus.log.logback.configuration-file=logback-dev.xml
# Prod环境加载logback-prod.xml
%prod.quarkus.log.logback.configuration-file=logback-prod.xml

注意必须使用Quarkus专属属性quarkus.log.logback.configuration-file,并加上Profile前缀%dev/%prod,而非标准Logback的logback.configurationFile。


内容的提问来源于stack exchange,提问作者Kamilox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:46:27