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-*的索引模式,选择时间字段后即可查询所有上报的日志。
验证步骤
- 启动Spring Boot应用,查看控制台是否有ES写入相关报错
- 调用ES索引查询接口确认日志索引已生成:
curl http://mylogs-2.us-east-1.es.localhost.localstack.cloud:4566/_cat/indices - 确认索引存在后直接查询索引内容验证写入成功:
curl http://mylogs-2.us-east-1.es.localhost.localstack.cloud:4566/logs-*/_search?q=*&pretty
内容的提问来源于stack exchange,提问作者thevoyager
相关产品推荐
相关产品推荐

