1

我正在开发一个工具来监视多个应用程序的日志文件,这些应用程序使用 java.logging 或 Log4j。

appender 始终是一个滚动文件 appender,文件的大小作为滚动的触发器。当两者( java.logging 和 log4j )发生滚动时,所有日志文件都被重命名以允许当前日志文件具有相同的名称。

我的问题是,如果我当前正在读取日志文件,我会阻止它被重命名,因此它将被擦除,因为记录器不会附加到它应该刚刚创建的文件上。

我尝试使用 socketAppender 来避免读取文件并直接收集数据,但是日志记录的操作至少需要 0.1 毫秒(使用 fileAppender 时为 0.02),因为我的一个应用程序的粒度为 1 毫秒我不能用这个。

我通过更改记录器的配置并使用此代码获得了这些结果

long start=System.currentTimeMillis();    
long numberOfLog=0;
long total=1000000;
while(numberOfLog<total){
    log.info(" "+numberOfLog);
    numberOfLog++;
}
long duree=System.currentTimeMillis()-start;

System.out.println("la durée est de "+duree+"ms pour "+total+" logs");

现在我想知道是否有任何解决方案可以在不干扰重命名的情况下读取这些日志文件?或者是否有解决方案来配置这些工具(log4j、java.logging)以在大小触发器上滚动而不重命名文件(使用名称或其他解决方案的日期)?

感谢您的反馈意见

4

0 回答 0