我正在使用graylog作为中央日志服务器,我正在使用gelf log4j2-appender将日志消息发送到graylog.这很好用.现在我创建了我的应用程序的docker镜像,我可以将我的软件作为docker容器运行.
使用docker我还会登录到stdout(console-appender)以将应用程序日志导入docker(docker logs {containerId}).
现在我问自己,我可以在gelf log4j2-appender上使用,而是使用一个docker日志驱动程序/插件来支持gelf. (见https://docs.docker.com/engine/admin/logging/overview/)
这里的最佳做法是什么?我认为使用docker log插件会将整个字符串消息发送到graylog,而graylog需要从该字符串中提取元信息(因此我需要在日志消息中提供此元数据,例如log_level).这可能会导致graylog端的资源消耗更多,并且也无法将docker配置为仅向graylog发送错误消息.这会导致更多的网络流量.使用log4j2 gelf-appender我能够提供日志消息之外的一些元数据,而不将其包含在主日志消息中,并且在graylog端不需要提取.也可以通过log_level配置应该将哪些消息发送到graylog.还是我错了?什么是最佳解决方案或每种方式将日志发送到graylog的优缺点是什么?
使用具有本机Java日志记录框架的正确GELF appender,您可以使用MDC之类的高级功能,使用有价值的结构化信息丰富日志消息,而无需在服务器端接收这些消息后重新解析这些消息.使用Docker GELF日志记录驱动程序,您只能接收每行一行的日志消息,尤其是Java应用程序可能很难处理(想想多行堆栈跟踪).
大多数日志记录框架都支持静态字段,因此您可以“注入”Docker容器的ID.