OSGi /保险丝7中的SocketAppender

时间:2019-02-06 12:57:44

标签: log4j osgi log4j2 apache-karaf jbossfuse

使用保险丝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>

但仍然没有。

1 个答案:

答案 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