logback修改日志内容_记一次Logstash日志丢失问题
某系統日志架構是在項目中通過配置logback.xml配置雙寫
寫本地日志文件
寫到遠程logstash
本地沒有問題,有問題是logstash,在Kibana上看到有些日志沒顯示。
開始是懷疑是不是日志丟了,由于使用的是LogstashTcpSocketAppender
查了下官文文檔:
Internally, the TCP appenders are asynchronous (using the LMAX Disruptor RingBuffer).All the encoding and TCP communication is delegated to a single writer thread.There is no need to wrap the TCP appenders with another asynchronous appender (such as AsyncAppender or LoggingEventAsyncDisruptorAppender).
The TCP appenders will never block the logging thread. If the RingBuffer is full (e.g. due to slow network, etc), then events will be dropped.
我得到了以下信息:
LogstashTcpSocketAppender和 logback的的異步appender的行為是類似的,也就是說,它也是異步的。
使用LogstashTcpSocketAppender ,不需要再外面再包裹任何Logback的appender
RingBuffer滿了,日志會丟失
關于最后一點,只需修改配置就可以。根據源碼看默認是8192 單位是B。且是2的冪次方。
"stash" <ringBufferSize>1048576ringBufferSize>然而這并沒有解決問題,于是仔細看了下logstash的日志,發現有大量的json解析錯誤,根據日志情況分析,原因是日志數據傳輸到logstash之后被截斷成了多條數據,于是有的數據就解析異常了,自然無法正常到歸集到es的索引文檔中。
知道原因后解決起來就有思路了,查了一下logstash的配置:
tcp { port => 5001 type => applogs codec => json }原因就是codec寫的是json的問題,應該用json_lines。
對于日志很長的json,應該使用json_lines格式,否則會被截斷成多條且解析錯誤。
tcp { port => 5001 type => applogs codec => json_lines }關注公眾號?獲取更多精彩內容
總結
以上是生活随笔為你收集整理的logback修改日志内容_记一次Logstash日志丢失问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jstree如何禁止平级拖拽?_小程序为
- 下一篇: c++对那些类型的数据不能使用引用_基于