Dar*_*ria 5 java logging log4j elasticsearch
我对如何将我的日志条目直接放入elasticsearch(而不是 logstash)感到有些困惑。到目前为止,我发现了一些附加目的地(log4j.appender.SocketAppender,log4j.appender.server等等),允许将日志发送到远程主机,也ConversionPattern可能这似乎让我们日志转换为“弹性友好”的格式,但这种方法看起来古怪......还是我错误?这是将日志发送到的一种方式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
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
log4j:WARN Detected problem with connection: java.net.SocketException: Broken pipe (Write failed)
Run Code Online (Sandbox Code Playgroud)
我找不到任何有用的例子,所以我不明白我做错了什么以及如何解决它。谢谢。
小智 5
如果您想使用它,我已经在这里编写了这个 Appender Log4J2 Elastic REST Appender 。它能够在将日志事件发送到 Elastic 之前根据时间和/或事件数量对其进行缓冲(使用 _bulk API,以便一次性发送所有日志事件)。它已发布到 Maven Central,因此非常简单。
我找到了最适合我的要求的解决方案。这是一个graylog。由于它是基于elasticsearch熟悉的用法构建的,所以我能够立即切换到它。
为了使用它,我添加了这个依赖项以及基本的 log4j2 依赖项:
<dependency>
<groupId>org.graylog2.log4j2</groupId>
<artifactId>log4j2-gelf</artifactId>
<version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并使用log4j2.json配置:
{
"configuration": {
"status": "info",
"name": "LOGGER",
"packages": "org.graylog2.log4j2",
"appenders": {
"GELF": {
"name": "GELF",
"server": "log.myapp.com",
"port": "12201",
"hostName": "my-awsome-app",
"JSONLayout": {
"compact": "false",
"locationInfo": "true",
"complete": "true",
"eventEol": "true",
"properties": "true",
"propertiesAsList": "true"
},
"ThresholdFilter": {
"level": "info"
}
}
},
"loggers": {
"logger": [
{
"name": "io.netty",
"level": "info",
"additivity": "false",
"AppenderRef": {
"ref": "GELF"
}
}
],
"root": {
"level": "info",
"AppenderRef": [
{
"ref": "GELF"
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19760 次 |
| 最近记录: |