我编写了方法来检查记录器的工作功能,如下所示,
package test;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
public class test1{
private static Logger logger = Logger.getLogger(test1.class);
public static void main(String args[])
{
System.out.println("time 1 "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
System.out.println("time 2 "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
logger.log(Level.INFO,"Eror "+System.currentTimeMillis());
System.out.println("time 3 "+System.currentTimeMillis());
System.out.println("time 4 "+System.currentTimeMillis());
System.out.println("time 5 "+System.currentTimeMillis());
}
}
我得到的输出如下,
time 1 1367325027239
time 2 1367325027247
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027239
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027247
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027248
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027249
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027250
Apr 30, 2013 6:00:27 PM test.test1 main
INFO: Eror 1367325027250
time 3 1367325027251
time 4 1367325027251
time 5 1367325027251
我的问题是,程序控制是否会等到记录器完成其过程
(即根据配置将消息写入日志文件),
或者在将控件返回到调用代码后,logger将独立执行。
(从上面的代码可以看出,记录器需要一些时间, 但我的想法是,在那个时间内文件操作无法完成)
答案 0 :(得分:1)
是的,日志记录会“阻止”程序流的执行,直到记录完成为止。您可以使用visualvm分析使用和不使用记录器的已使用线程的数量,以查看记录器是否可以异步实现。不要被每次启动的deamon线程所激怒。
Normaly logger和所有其他文件编写者正在使用Buffer来加速编写。通过将内容写入缓冲区并稍后将其刷新到目标,可以保存执行时间。