Java Log4j记录到共享日志文件
是否有一种方法可以将log4j日志记录事件写入其他应用程序也正在写入的日志文件。其他应用程序可以是非java应用程序。缺点是什么?锁定问题?格式化?您的最佳选择可能是让每个应用程序单独记录,然后安排一个计划作业,根据时间将文件“拉链”在一起。如果您确实需要对完整日志进行最新访问,可以每小时运行一次。Log4j非常灵活,您可以以与文件中已有记录兼容的格式创建日志条目。只需查看appender,了解如何格式化特定的数据字段Java Log4j记录到共享日志文件,java,log4j,Java,Log4j,是否有一种方法可以将log4j日志记录事件写入其他应用程序也正在写入的日志文件。其他应用程序可以是非java应用程序。缺点是什么?锁定问题?格式化?您的最佳选择可能是让每个应用程序单独记录,然后安排一个计划作业,根据时间将文件“拉链”在一起。如果您确实需要对完整日志进行最新访问,可以每小时运行一次。Log4j非常灵活,您可以以与文件中已有记录兼容的格式创建日志条目。只需查看appender,了解如何格式化特定的数据字段 您主要关心的是锁定,很可能是其他应用程序的锁定。确保所有应用程序都没有对文件
您主要关心的是锁定,很可能是其他应用程序的锁定。确保所有应用程序都没有对文件进行独占锁定,您应该会没事。Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现 它还支持syslogd和Windows事件日志,这可能有助于将日志输出与非Java应用程序的事件统一起来
如果性能是一个问题,那么您需要一个服务来编写日志文件,而不是尝试在不同的日志应用程序之间协调一致的锁定策略。我有以下两种方法的经验:
如果您不打算使用JBoss,您可以使用第二种方法作为自己日志解决方案的基础。我认为默认的log4j appender不会执行任何文件锁定或同步。如果没有这样的锁定,您很可能会丢失日志消息或收到损坏的消息 我不确定在Java中进行文件锁定有多容易,但为了直接实现这一点,我认为您需要对适当的Appender进行子类化,并覆盖日志记录方法,用同步代码将其包装起来,以锁定和解锁文件。这可能会影响性能,具体取决于系统负载 Log4perl有一个正在同步的Appender,Log::Log4perl::Appender::Synchronized,它包装了一个Appender并实现了这一点,并且似乎在它的Log::Log4perl::Appender::文件中提供了一个标志来防止行的交错。您可以看看它们做了什么,看看它是否可以在Java中复制