使用保险丝7(Karaf版本4.2.0.fuse-000237-redhat-1)
试图使SocketAppender工作。
最好的猜测是添加到org.ops4j.pax.logging.cfg
# ELK appender
log4j2.appender.elk.type = SocketAppender
log4j2.appender.elk.name = ELK
log4j2.appender.elk.remoteHost=10.0.0.2
log4j2.appender.elk.port=12202
log4j2.appender.elk.application=QA
log4j2.appender.elk.reconnectionDelay=0
log4j2.rootLogger.appenderRef.ELK.ref = ELK
但这只会停止所有日志,甚至包括控制台。
我实际上是在尝试使logstash-gelf appender正常工作,但是在Fuse 7 / Karaf中使用自定义附加程序看起来像是一团糟。 (请参见link)。我怀疑它是否会奏效。
SocketAppender在Fuse 6中使用log4j正常工作。
设置的主要区别在于此行,该行现在不适用于log4j2:
log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
-------------编辑:
# ELK appender
log4j2.appender.elk.type = Socket
log4j2.appender.elk.name = ELK
log4j2.appender.elk.layout.type = GelfLayout
log4j2.appender.elk.remoteHost=10.0.0.2
log4j2.appender.elk.port=12202
log4j2.appender.elk.application=QA
log4j2.appender.elk.reconnectionDelay=0
log4j2.rootLogger.appenderRef.ELK.ref = ELK
这至少不会杀死日志。还发现了GelfLayout,它可以替换logstash-gelf附加程序,如果它起作用的话。
-------------编辑2 ----回复Grzegorz:
感谢您的回复...很遗憾,您仍然无法正常工作... 如上所述,我已将行更改为以下内容:
# ELK appender
log4j2.appender.socket.type = Socket
log4j2.appender.socket.name = Socket
log4j2.appender.socket.host=localhost
log4j2.appender.socket.port=12202
log4j2.appender.socket.protocol=TCP
log4j2.appender.socket.layout.type = JsonLayout
log4j2.rootLogger.appenderRef.Socket.ref = Socket
并开始运行netcat
[root@ldkr03 etc]# nc -lk 12202
(not showing anything...)
log:log test
显示16:10:34.747 INFO [pipe-log:log test] test
,但在nc -lk 12202
窗口中什么也不显示。
也可能相关,尽管它可以很好地写入控制台:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
-------------编辑3 ----
切换到:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
但仍然没有。
答案 0 :(得分:1)
我将此配置用于添加程序:
log4j2.appender.socket.type = Socket
log4j2.appender.socket.name = Socket
log4j2.appender.socket.host = localhost
log4j2.appender.socket.port = 5666
log4j2.appender.socket.protocol = TCP
log4j2.appender.socket.layout.type = JsonLayout
并将此附加程序附加到根记录器:
log4j2.rootLogger.appenderRef.Socket.ref = Socket
我从nc
开始使用nc -lk 5666
,并从Karaf shell控制台使用log:log asd
生成了日志条目。 Netcat正在打印如下内容:
{
"timeMillis" : 1549546648409,
"thread" : "pipe-log:log asd",
"level" : "INFO",
"loggerName" : "org.apache.karaf.log.core",
"message" : "asd",
"endOfBatch" : false,
"loggerFqcn" : "org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl",
"threadId" : 172,
"threadPriority" : 5
}
如果您选中https://logging.apache.org/log4j/2.x/manual/appenders.html#SocketAppender,则没有remoteHost
属性,而只有host
。