【问题标题】:log4j: How to use SocketAppender?log4j:如何使用 SocketAppender?
【发布时间】:2012-07-30 08:18:27
【问题描述】:

我有一个关于如何使用 SocketAppender 的answer(我需要它来从分布式系统收集日志),但我是 log4j 的新手,我不知道如何使用该示例代码。

也许我应该有这样的 log4j-server.properties:

log4j.appender.SERVER=org.apache.log4j.net.SocketAppender
log4j.appender.SA.Port=4712
log4j.appender.SA.RemoteHost=loghost
log4j.appender.SA.ReconnectionDelay=10000

但是我还是不知道怎么启动服务器(这行怎么用)

org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties

什么是最重要的: 在哪里\如何查看我的日志?

【问题讨论】:

  • 那些被称为命令行参数。
  • 请注意,您不应该在某些 log4j 版本中使用该功能(“这会影响从 1.2 到 1.2.17 的 Log4j 版本。”):nvd.nist.gov/vuln/detail/CVE-2019-17571

标签: java log4j appender


【解决方案1】:

要启动服务器,只需在命令提示符下键入以下命令,服务器就会启动并运行:

java -classpath C:Users.m2repositorylog4jlog4j1.2.17log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties

请不要忘记在您的系统中指定正确的 log4j.jar 路径。

【讨论】:

    【解决方案2】:

    您可以使用运行服务器

    java -classpath log4j.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
    

    SimpleSocketServer 接收远程SocketAppender 发送到指定端口号的日志事件,并根据您在log4j-server.properties 中提供的配置记录它们就像它们在本地生成一样 .您可以配置相关的控制台/文件/滚动文件附加程序并将它们附加到相关的记录器,就像您直接在原始进程中进行日志记录而不是通过网络套接字传输日志事件一样。 IE。如果您当前正在使用以下内容创建本地日志文件:

    log4j.rootLogger=DEBUG, file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=logfile.log
    log4j.appender.file.MaxFileSize=1MB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n
    

    然后你会改变它,以便发送方log4j.properties 简单地说

    log4j.rootLogger=DEBUG, server
    log4j.appender.server=org.apache.log4j.net.SocketAppender
    log4j.appender.server.Port=4712
    log4j.appender.server.RemoteHost=loghost
    log4j.appender.server.ReconnectionDelay=10000
    

    而服务器端 log4j-server.properties 包含之前在发送端的定义:

    log4j.rootLogger=DEBUG, file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=logfile.log
    log4j.appender.file.MaxFileSize=1MB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n
    

    请特别注意,在发送方的 SocketAppender 上指定布局是没有意义的 - 通过网络传输的是整个日志事件对象,接收方负责进行布局。

    【讨论】:

    • 非常感谢,它有效:) 但我还有一个问题。现在我得到了额外的日志,比如[2012-08-01 15:20:39,950] [main] [Connected to client at /127.0.0.1] [2012-08-01 15:20:39,950] [main] [Starting new socket node.] [2012-08-01 15:20:39,950] [main] [Waiting to accept a new client.] 我应该怎么做才能避免记录这个?
    • 这些看起来像是由套接字服务器本身生成的消息。您必须稍微改进您的日志记录配置。根据这些额外消息的级别,将您的服务器端根记录器设置为 ERROR 而不是 DEBUG 然后添加 log4j.logger.com.example=DEBUG 或任何适合您的发送端正在记录的记录器可能就足够了。
    • 对 Log4J 2 的支持怎么样?
    • 服务器能否识别客户端,例如不同的客户端到不同的文件,或者为每个日志事件添加客户端ip?
    • @Leon 不是标准的,但SimpleSocketServer 是非常简单的代码,因此在本地记录事件之前,修改它以将客户端的 IP 地址添加到 MDC 并不难,那么您可以在 appender 模式中引用该 MDC 键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2015-01-29
    相关资源
    最近更新 更多