套接字服务器 - 如何在Log4j2.xml中获取客户端的名称?

时间:2016-06-09 20:47:45

标签: java xml sockets logging log4j2

我设置了一个套接字服务器,用于接收来自多台计算机和多个Web应用程序的日志事件。如何检索发送每个事件的客户端名称(最好是XML配置)?或者我完全偏离了在此框架中分离日志的最佳实践?

预期结果:具有Log4j2路由追加器的套接字服务器,可以识别入站日志事件的客户端名称,并相应地将其路由到相应的文件。

结果我得到:没有路由器,它会冗余地将所有日志事件写入所有文件。使用路由器,由于我不知道正确的查找,因此不会将任何事件记录到任何文件中。

一个客户端配置的修改版本:

<?xml version="1.0" encoding="UTF-8"?>  
<Configuration status="trace">  
    <Appenders>  

        <Socket
            name="Socket"
            host="log4j-srv"
            port="1234"
        >
            <SerializedLayout />
        </Socket>
    </Appenders>  
    <Loggers>  
        <Root level="trace">
            <AppenderRef ref="Socket"/>
        </Root>  
    </Loggers>  
</Configuration>  

服务器:

    <?xml version="1.0" encoding="UTF-8"?>  
    <Configuration status="trace">
        <Appenders>  
            <Routing name="Routing">
                <Routes pattern="???">
                    <Route>
                        <RollingRandomAccessFile name="Default" 
                                                 fileName="example1.log" 
                                                 example-%d{yyyy-MM-dd}.log">
                            <PatternLayout pattern="${hostName} %d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
                            <Policies>
                                <TimeBasedTriggeringPolicy/>
                            </Policies>
                            <DefaultRolloverStrategy max="10"/>
                        </RollingRandomAccessFile>
                    </Route>
                    <Route key="client1">
                        <RollingRandomAccessFile name="Client1" 
                                                 fileName="otherexample.log" 
filePattern="otherexample-%d{yyyy-MM-dd}.log">
                            <PatternLayout pattern="${hostName} %d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
                            <Policies>
                                <TimeBasedTriggeringPolicy/>
                            </Policies>
                            <DefaultRolloverStrategy max="10"/>
                        </RollingRandomAccessFile>
                    </Route>
                </Routes>
            </Routing>
        </Appenders>  
        <Loggers>  
            <Root level="info">  
                <AppenderRef ref="Routing"/>
            </Root>  
        </Loggers>  
    </Configuration>  

1 个答案:

答案 0 :(得分:2)

在默认配置中,SocketAppender不包含发件人的主机名。但是,您可以通过执行以下操作轻松完成此操作:

<Logger name="com.acme" level="debug" additivity="false">
  <Property name="hostName">$${hostName}</Property>
  <AppenderRef ref="socket"/>
</Logger>