logback 集成 logstash
logback 集成 logstash
相关环境参考: Java 输出 JSON 日志
1. 添加依赖
1 |
|
2. 修改logback.xml配置文件
1 |
|
3. 配置说明
如果原有配置文件中需要保留一些特殊配置时,需要理解这里的配置才能将配置应用到已有的配置中。
3.1 动态刷新
想要在应用运行时看到修改配置文件后的效果,可以在原有配置添加:
1 |
|
3.2 优雅关机
增加logstash配置后,为了让程序在关闭时能正确关闭相关的资源,建议配置:
1 |
|
服务会等待5秒后执行释放资源的相关操作。
3.3 logstash appender
添加下面的配置,各部分说明看下面注释:
1 |
|
这里特别说明 <customFields>{"host":"${HOSTNAME}", "appname":"cloud-user"}</customFields>
:
host
会在 json 中添加主机信息,以后有类似 POD 相关信息时,可以参考这里使用环境变量。appname
定义当前的应用名,这里配置死的,后续使用容器或者POD时,也可以通过环境变量进行设置。
除此之外,还可以添加额外的自定义字段。
3.4 应用 appender
将 logstash appender 添加到某个 logger 下面,例如全局的:
1 |
|
3.5 总结
到这里可以看到,上面提供的完整配置中,没有介绍常见的 控制台输出,其他都是必要的配置。
配置正常后,就可以将日志以 JSON 形式输出到 logstash 中了,logstash 可以参考下面的配置,提供 tcp 端口的服务:
1 |
|
elasticsearch 插件文档:https://www.elastic.co/guide/en/logstash/8.5/plugins-outputs-elasticsearch.html
上面的配置会为每个 appname
创建对应的索引,在 Kibana 中的 DavaView 可以配置 app*
索引来查看所有应用的日志。
4. 代码中使用
默认情况下,代码中仍然通过 logger.info(...)
方式输出日志即可,日志的内容会作为 message
字段存储。
如果想要额外记录其他信息,全局的信息可以通过 slf4j
的 MDC 机制记录,如下:
1 |
|
MDC信息和线程绑定,处理不好可能会乱,logstash-logback-encoder 提供了 StructuredArguments
,参考文档:
https://github.com/logfellow/logstash-logback-encoder#event-specific-custom-fields
由于这种方式依赖了具体的日志实现,需要做一层封装才适合使用。
5. Kibana 效果
5.1 索引
5.2 Data Views
5.3 Discover
对应的 JSON:
1 |
|