从多个应用程序/进程记录到单个日志文件

And*_*rew 13 java unix log4j

我们的应用服务器(weblogic)都使用log4j登录网络共享上的同一文件.除此之外,我们将托管服务器中的所有Web应用程序记录到常见的error.log中.我无法想象这是一个好主意,但想听听一些专业人士的意见.我知道每个Web应用程序都有自己的类加载器,因此任何线程同步只发生在应用程序中.那么当多个进程开始聚合在一个日志文件上时会发生什么?我们可以期待散布的日志声明吗?性能问题?如何将多个Web应用程序记录到公共日志文件中?环境是Solaris.

Cek*_*eki 10

谨慎模式下, logback将安全地处理可能在写入同一网络共享文件的不同主机上的多个JVM.它甚至可以处理临时网络故障.对于少数节点,性能应该是完全可接受的,例如4或更少.对于5个或更多节点,所有记录都很重,您可能会注意到性能受到影


paj*_*ton 8

如果没有同步对文件的写访问权限以及当然糟糕的编程习惯,这通常是个坏主意.它可能工作的唯一情况是附加到本地机器上的文件 - 每个人只是在文件末尾添加行.

但是,由于您的文件位于网络共享上,因此可能会很快变成垃圾.您没有告诉您正在使用哪个分布式文件系统,但对于NFS,您可以在open(2)手册页上找到以下说明:

O_APPEND文件以追加模式打开.在每次write()之前,文件偏移量位于文件的末尾,就像使用lseek()一样.如果多个进程一次将数据附加到文件,O_APPEND可能会导致NFS文件系统上的文件损坏.这是因为NFS不支持附加到文件,因此客户端内核必须模拟它,这在没有竞争条件的情况下无法完成.

当然这是C,但由于Java是用C实现的,所以它不能做得更好(至少不考虑系统调用:-)).


小智 5

我们需要从运行相同应用程序的所有受管服务器生成单个文件.我们开发了一个java日志服务器,它打开一个端口并监听日志事件.我们使用log4j套接字appender将日志事件写入同一端口并创建一个文件.