log4j:Socket Appender如何工作?

时间:2012-08-06 09:48:05

标签: java log4j

我不确定Socket Appender是如何工作的。我知道记录事件被发送到特定端口。然后我们可以在控制台上打印日志或将其放入文件中。

我的问题更多的是关于日志的发送方式。有没有,例如一个队列?是同步还是异步?可以使用它减慢我的程序?

我找到了一些信息here,但我不清楚。

3 个答案:

答案 0 :(得分:11)

来自SocketAppender文档

  

记录事件由本机TCP自动缓冲   实现。这意味着如果到服务器的链接很慢但是   仍然比客户端生成(日志)事件的速度快,   客户端不会受到慢速网络连接的影响。   但是,如果网络连接速度比事件速度慢   生产,然后客户端只能以网络速率进步。在   特别是,如果到服务器的网络链接已关闭,则客户端   将被阻止。

     

另一方面,如果网络链接已启动,但是   服务器关闭,客户端在制作日志时不会被阻止   请求,但由于服务器不可用,日志事件将丢失。

由于appender使用TCP协议,我会说日志事件是“同步的”。

基本上,appender使用TCP将第一个日志事件发送到服务器。但是,如果网络延迟太高以至于在生成第二个事件时仍未发送消息,则第二个日志事件将不得不等待(从而阻塞),直到第一个事件被消耗。所以是的,如果应用程序生成的日志事件比网络传递的速度快,那么它会降低应用程序的速度。

正如@Akhil和@Nikita所提到的,如果您不希望应用程序的性能受到网络延迟的影响,那么JMSAppender或AsyncAppender将是更好的选择。

答案 1 :(得分:4)

Socket Appender将日志作为序列化的Obect发送到SocketNode或日志服务器。在appender中,具有已配置的reconnectionDelay的连接器线程将检查连接完整性,并在未初始化或断开连接时转储所有日志。对应用程序流没有阻塞。  如果在通过JVM发送日志信息时需要更好的JMS功能,请尝试JMSAppender

  1. Log4j JMS appender可用于将日志消息发送到JMS broker。事件被序列化并作为JMS消息类型ObjectMessage传输。
  2. 您可以获得示例程序HERE

答案 2 :(得分:2)

它似乎是同步的(检查来源),但我可能会弄错。您可以使用AsyncAppender使其异常。请参阅this