java - Log4j 直接记录到 elasticsearch 服务器

标签 java elasticsearch logging log4j

我对如何将我的日志条目直接放入 elasticsearch(而不是 logstash)感到有点困惑。到目前为止,我发现了一些允许将日志发送到远程主机以及 ConversionPattern 的附加程序(log4j.appender.SocketAppenderlog4j.appender.server 等) 似乎允许我们将日志转换为“弹性友好”格式的可能性,但这种方法看起来很奇怪......或者我错了吗?这是将日志发送到 elastic 的一种方式吗?

到目前为止我有这样的配置:

log4j.rootLogger=DEBUG, server
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=9200
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=10000
log4j.appender.server.layout.ConversionPattern={"debug_level":"%p","debug_timestamp":"%d{ISO8601}","debug_thread":"%t","debug_file":"%F", "debug_line":"%L","debug_message":"%m"}%n

但是我得到一个错误:

log4j:WARN Detected problem with connection: java.net.SocketException: Broken pipe (Write failed)

我找不到任何有用的例子,所以我不明白我做错了什么以及如何解决它。谢谢。

最佳答案

我在这里写了这个 appender Log4J2 Elastic REST Appender如果你想使用它。它能够在将日志事件发送到 Elastic 之前根据时间和/或事件数量缓冲日志事件(使用 _bulk API 以便一次性发送所有日志事件)。 它已发布到 Maven Central,因此非常简单。

关于java - Log4j 直接记录到 elasticsearch 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199174/

相关文章:

asp.net - Log4net 没有记录任何内容

mysql - 使用哪种策略来设计日志数据存储?

Java Socket-Server 查询 MySQL 数据库

sorting - Elasticsearch zScore 计算(合并 2 个具有不同分数分布的文档集合)

Elasticsearch 6.x警告无法打开文件logs/gc.log

elasticsearch - 如何使用elasticsearch搜索单词的开头?

java - 当SVN中的文件夹名称为src/java/com时,从svn创建eclipse项目

java - 在 JBoss 7.1.1 的这个模块中已经定义了一个名为 'XXX' 的组件

java - 如何在调用代码输入和基于计时器的输入之间切换并使用响应式(Reactive)编程对其进行单元测试

c++ - 如何将宏参数转发到格式 func?