应用程序日志记录配置 -
<appender name="stash"
class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
<destination>localhost:5001</destination>
<!-- encoder is required -->
<encoder>
<pattern>%d{dd/MM/YY HH:mm:ss.SSS} - %-5level[%-5thread] - %logger{32} - %msg%n</pattern>
</encoder>
</appender>
Logstash输入是TCP插件,输出是ElasticSearch。 最初Logstash服务器已关闭,应用程序正在连续生成日志。在Kibana中查看时,不会添加新日志。一段时间后,开始使用logstash。现在,当在Kibana中查看日志时,似乎所有在logstash关闭时生成的日志都会刷新到ES并且可以查看。
我在logstash服务器关闭时检查ss | grep 5001
,端口5001处于CLOSED-WAIT状态,队列为空。
这可能是什么原因?
答案 0 :(得分:1)
appender net.logstash.logback.appender.LogstashAccessTcpSocketAppender
扩展[net.logstash.logback.appender.AbstractLogstashTcpSocketAppender
](https://github.com/logstash/logstash-logback-encoder/blob/ master / src / main / java / net / logstash / logback / appender / AbstractLogstashTcpSocketAppender.java),它有一个内部环形缓冲区缓冲日志事件。需要缓冲才能实现非阻塞行为。否则,在将事件写入TCP套接字时,appender会阻塞您的代码。
环形缓冲区默认保存8192个字节。如果在事件可以发送到套接字之前缓冲区已满,则appender开始丢弃事件。可以通过appender接口配置缓冲区大小和许多其他属性。