【发布时间】:2016-10-10 16:35:14
【问题描述】:
我设置了一个套接字服务器来接收来自多台机器和多个 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>
【问题讨论】:
-
定义“客户名称”。
-
@EJP 在发件人的主机名中。
标签: java xml sockets logging log4j2