Log4j和集中日志集合

时间:2017-08-25 21:10:03

标签: log4j

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

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

2 个答案:

答案 0 :(得分:0)

对于您的第一个问题 - ,这取决于客户端程序向其发送日志的远程服务器。如果您已经开发了一些用于在远程服务器上接收日志的程序,则有两种方法可以为每个客户端日志创建单独的日志文件 -

  1. 服务器程序应该侦听特定端口,并在收到一些日志后,应检查客户端IP,然后为每个客户端IP创建日志文件。

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

  3. 如果您的服务器基于Linux,我建议您使用rsyslog来集中日志收集。在rsyslog中,您可以单独配置每个客户端,并将日志转储到单独的日志文件中。

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

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

答案 1 :(得分:0)

您必须在配置文件中进行一些更改。考虑到多个应用程序想要将其日志文件写入集中式远程位置,如果是,那么下面提到的更改将有所帮助: 您需要在每个应用程序的Log4j配置文件中进行更改。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
    <Properties>
        <Property name="server-log-path">REMOTE_SERVER_PATH</Property>
    </Properties>
    <Appenders>
    <File name="Login-App-File-Appender" fileName="${server-log-path}/file_name.log" >
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>
            </PatternLayout>
    </File>

 <File name="CheckOut-App-File-Appender" fileName="${server-log-path}/file_name.log" >
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>
            </PatternLayout>
    </File>
  </Appenders>

<Loggers>
        <Logger name="com.microService.LoginService" level="info" additivity="false">
            <AppenderRef ref="Login-App-File-Appender"/>

 </Logger>

 <Logger name="com.microService.CheckOutService" level="info" additivity="false">
            <AppenderRef ref="CheckOut-App-File-Appender"/>

 </Logger>
<Root>
            <AppenderRef ref="Login-App-File-Appender"/>
        </Root>
</Loggers>
</Configuration>