如何将Docker部署的Elasticsearch 8.12.0日志转为纯文本格式?
解决Elasticsearch 8.12.0 Docker日志JSON转纯文本的问题
Elasticsearch 8.x默认采用JSON格式输出日志,在开发环境中可读性较差,你可以通过以下两种方式将日志改为纯文本格式:
方法1:通过环境变量快速修改(无需额外文件)
直接在docker-compose的elastic服务环境变量中添加日志格式配置,覆盖默认的JSON布局:
... elastic: image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0 environment: - discovery.type=single-node - ES_JAVA_OPTS=-Dlog4j2.appender.console.layout.type=PatternLayout -Dlog4j2.appender.console.layout.pattern=[%d{ISO8601}] [%t] %-5p %c{1.} %m%n ports: - "9200:9200"
这个配置会将日志格式改为类似 [2024-05-20T12:34:56,789] [main] INFO o.e.n.Node starting ... 的纯文本格式,你可以根据需求调整pattern参数自定义日志样式。
方法2:挂载自定义日志配置文件(更灵活)
如果需要更复杂的日志配置,比如调整日志级别、添加额外输出项,可以创建自定义的log4j2.properties文件:
- 在项目目录下创建
log4j2.properties,内容如下:
status = error # 配置控制台输出为纯文本格式 appender.console.type = Console appender.console.name = console appender.console.layout.type = PatternLayout appender.console.layout.pattern = [%d{ISO8601}] [%t] %-5p %c{1.} %m%n # 设置根日志级别 rootLogger.level = info rootLogger.appenderRef.console.ref = console
- 修改docker-compose配置,添加挂载项:
... elastic: image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0 environment: - discovery.type=single-node ports: - "9200:9200" volumes: - ./log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties
修改完成后,重启docker-compose服务,Elasticsearch就会输出纯文本格式的日志了。
内容的提问来源于stack exchange,提问作者Udi
相关产品推荐
相关产品推荐

