我们的应用服务器(weblogic)都使用log4j登录网络共享上的同一文件.除此之外,我们将托管服务器中的所有Web应用程序记录到常见的error.log中.我无法想象这是一个好主意,但想听听一些专业人士的意见.我知道每个Web应用程序都有自己的类加载器,因此任何线程同步只发生在应用程序中.那么当多个进程开始聚合在一个日志文件上时会发生什么?我们可以期待散布的日志声明吗?性能问题?如何将多个Web应用程序记录到公共日志文件中?环境是Solaris.
如果没有同步对文件的写访问权限以及当然糟糕的编程习惯,这通常是个坏主意.它可能工作的唯一情况是附加到本地机器上的文件 - 每个人只是在文件末尾添加行.
但是,由于您的文件位于网络共享上,因此可能会很快变成垃圾.您没有告诉您正在使用哪个分布式文件系统,但对于NFS,您可以在open(2)手册页上找到以下说明:
O_APPEND文件以追加模式打开.在每次write()之前,文件偏移量位于文件的末尾,就像使用lseek()一样.如果多个进程一次将数据附加到文件,O_APPEND可能会导致NFS文件系统上的文件损坏.这是因为NFS不支持附加到文件,因此客户端内核必须模拟它,这在没有竞争条件的情况下无法完成.
当然这是C,但由于Java是用C实现的,所以它不能做得更好(至少不考虑系统调用:-)).
小智 5
我们需要从运行相同应用程序的所有受管服务器生成单个文件.我们开发了一个java日志服务器,它打开一个端口并监听日志事件.我们使用log4j套接字appender将日志事件写入同一端口并创建一个文件.
| 归档时间: |
|
| 查看次数: |
28632 次 |
| 最近记录: |