【问题标题】:SocketAppender in OSGi / Fuse 7OSGi / Fuse 7 中的 SocketAppender
【发布时间】:2019-06-30 10:33:43
【问题描述】:

使用 Fuse 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 appender。

------------- EDIT 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>

但还是没有。

【问题讨论】:

  • 好的,“log4j2.appender.elk.type = Socket”至少阻止了它使整个日志系统崩溃……但 SocketAppender 仍然无法正常工作。
  • 好的,现在可以了。德普。不知道我做了什么,但有些愚蠢。

标签: log4j osgi log4j2 apache-karaf jbossfuse


【解决方案1】:

我在 appender 中使用了这个配置:

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 -lk 5666 启动nc,并使用来自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

【讨论】:

  • 谢谢,可惜还没用……请看主帖中的回复
  • 现在工作。我认为我的问题是将其发送到 docker 内的 localhost,但在主机上运行 nc。当我在另一台机器上运行 nc 时它起作用了。如果你有时间,请看我的下一个问题。 stackoverflow.com/questions/54691259/…
猜你喜欢
  • 2017-10-17
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2014-03-31
  • 1970-01-01
相关资源
最近更新 更多