2017-08-25 76 views
1

我使用log4j的写日志到本地服务器的现有分布式应用程序。我想保留现有的功能,并将一些日志发送到中央存储库。我见过使用log4j的与SocketAppender发送日志到远程服务器的例子,但还没有看到多个服务器发送到同一个远程服务器在一个单独的文件中写入每台服务器的日志的例子。有没有这样的例子?Log4j和集中日志收集

作为替代,我很好奇使用使用一个数据库作为集中式日志存储库中的JDBCAppender但对于如何做区分,其中从消息查看查询结果时,传来了同样的问题。是否有log4j属性设置来标识可以在侦听器服务器上解释的发件人?

回答

0

对于你的第一个问题 -它将取决于你的客户端程序发送日志的远程服务器。如果您已经开发了一些程序,用于接收远程服务器上的日志然后,有2种方法来为每个客户端日志单独的日志文件 -

  1. 服务器程序应该监听某个端口上,并得到了一些记录之后,应检查客户端IP,然后为每个客户端IP创建日志文件。

  2. 使服务器程序侦听不同的端口为每个客户端上,一旦客户端连接到其指定的端口,接收数据,并在日志文件中转储。这种方法看起来很简单,但不推荐。

如果您的服务器是基于Linux,我会建议你使用rsyslog用于集中收集日志。在rsyslog,您可以单独配置每个客户端和转储在单独的日志文件的日志。

对于第二个问题 -你可以使用Log4j Nested diagnostic Context (NDC)功能在数据库写hostname。请参阅this示例。此示例将USER_ID用作写入数据库的额外列。同样,您可以使用此额外列来编写hostname。在写入任何日志语句之前,在您的客户程序开始时,您必须使用以下代码将值放入NDC -

NDC.push(InetAddress.getLocalHost().getHostName());