我不确定Socket Appender是如何工作的。我知道记录事件被发送到特定端口。然后我们可以在控制台上打印日志或将其放入文件中。
我的问题更多的是关于日志的发送方式。有没有,例如一个队列?是同步还是异步?可以使用它减慢我的程序?
我找到了一些信息here,但我不清楚。
答案 0 :(得分:11)
来自SocketAppender文档
记录事件由本机TCP自动缓冲 实现。这意味着如果到服务器的链接很慢但是 仍然比客户端生成(日志)事件的速度快, 客户端不会受到慢速网络连接的影响。 但是,如果网络连接速度比事件速度慢 生产,然后客户端只能以网络速率进步。在 特别是,如果到服务器的网络链接已关闭,则客户端 将被阻止。
另一方面,如果网络链接已启动,但是 服务器关闭,客户端在制作日志时不会被阻止 请求,但由于服务器不可用,日志事件将丢失。
由于appender使用TCP协议,我会说日志事件是“同步的”。
基本上,appender使用TCP将第一个日志事件发送到服务器。但是,如果网络延迟太高以至于在生成第二个事件时仍未发送消息,则第二个日志事件将不得不等待(从而阻塞),直到第一个事件被消耗。所以是的,如果应用程序生成的日志事件比网络传递的速度快,那么它会降低应用程序的速度。
正如@Akhil和@Nikita所提到的,如果您不希望应用程序的性能受到网络延迟的影响,那么JMSAppender或AsyncAppender将是更好的选择。
答案 1 :(得分:4)
Socket Appender将日志作为序列化的Obect发送到SocketNode或日志服务器。在appender中,具有已配置的reconnectionDelay的连接器线程将检查连接完整性,并在未初始化或断开连接时转储所有日志。对应用程序流没有阻塞。 如果在通过JVM发送日志信息时需要更好的JMS功能,请尝试JMSAppender。
您可以获得示例程序HERE。
答案 2 :(得分:2)
它似乎是同步的(检查来源),但我可能会弄错。您可以使用AsyncAppender使其异常。请参阅this。