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

Spring Boot通过Logback向ES bulk接口上报日志Kibana无显示问题

问题排查与解决方案

你当前配置存在以下几处核心错误,按优先级修正即可:

1. ElasticsearchAppender URL配置错误

你使用的com.internetitem.logback.elasticsearch.ElasticsearchAppender组件会自动拼接索引和bulk请求路径,无需手动在url中添加索引名和/_bulk后缀,你当前配置的url会导致请求路径错误,写入失败。

2. 索引匹配错误

你配置的日志索引为按天生成的logs-%date{yyyy-MM-dd}格式,日志不会写入你手动创建的my-index索引,Kibana如果仅配置了my-index的索引模式,自然无法查询到日志。

3. 废弃type配置

ES 7.x版本已经全面废弃自定义type,默认仅支持_doc类型,你额外配置的<type>tester</type>会导致写入请求不符合ES规范。

4. 消息长度限制过小

你配置的maxMessageSize=100会截断长度超过100字节的日志,大概率导致日志内容异常写入失败。

5. 日志上报范围不匹配

你当前仅配置了name="es-logger"的logger才会上报ES,如果你业务代码中使用类名作为logger名称(常见写法LoggerFactory.getLogger(XXX.class)),日志不会触发ES上报逻辑。

修正后的配置

logback-spring.xml调整

<appender name="ELASTIC" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
    <!-- 仅填ES根地址即可,组件自动拼接bulk路径 -->
    <url>http://mylogs-2.us-east-1.es.localhost.localstack.cloud:4566</url>
    <index>logs-%date{yyyy-MM-dd}</index>
    <!-- 移除type配置 -->
    <loggerName>es-logger</loggerName>
    <errorLoggerName>es-error-logger</errorLoggerName>
    <connectTimeout>30000</connectTimeout>
    <errorsToStderr>false</errorsToStderr>
    <includeCallerData>false</includeCallerData>
    <logsToStderr>false</logsToStderr>
    <maxQueueSize>104857600</maxQueueSize>
    <maxRetries>3</maxRetries>
    <readTimeout>30000</readTimeout>
    <sleepTime>250</sleepTime>
    <rawJsonMessage>true</rawJsonMessage>
    <includeMdc>false</includeMdc>
    <!-- 调整为不限制日志长度 -->
    <maxMessageSize>-1</maxMessageSize>
    <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" />
    <headers>
        <header>
            <name>Content-Type</name>
            <value>application/x-ndjson</value>
        </header>
    </headers>
</appender>

<!-- 新增错误日志输出,方便排查上报错误 -->
<logger name="es-error-logger" level="ERROR" additivity="false">
    <appender-ref ref="STDOUT" />
</logger>

<!-- 方案1:仅指定es-logger上报,业务代码需使用 LoggerFactory.getLogger("es-logger") 打印日志 -->
<logger name="es-logger" level="INFO" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ELASTIC" />
</logger>

<!-- 方案2:所有日志都上报ES,将ELASTIC appender加入root logger即可
<root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ELASTIC" />
</root>
-->

Kibana配置调整

在Kibana的Stack Management > Index Patterns中,新建匹配规则为logs-*的索引模式,选择时间字段后即可查询所有上报的日志。

验证步骤
  1. 启动Spring Boot应用,查看控制台是否有ES写入相关报错
  2. 调用ES索引查询接口确认日志索引已生成:
    curl http://mylogs-2.us-east-1.es.localhost.localstack.cloud:4566/_cat/indices
  3. 确认索引存在后直接查询索引内容验证写入成功:
    curl http://mylogs-2.us-east-1.es.localhost.localstack.cloud:4566/logs-*/_search?q=*&pretty

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:02