当磁盘空间不足时log4j的问题
程序结构:try{
sSessLog = serviceSn +","+ busiReqs[0].device_number;
Logger.getLogger("").info(TypeUtil.typeToString("req", para));
try
{
result = service.updateBalance(para);
} catch (RemoteException e)
{
Logger.getLogger("").info(e);
return ejbTux.dealReturnData(retdata, Tools.ejbErr(e
.getMessage()));
}
Logger.getLogger("").info(TypeUtil.typeToString("result", result));
}catch(Exception e){
Logger.getLogger("").info("ejb.error.sSessLog=" + sSessLog);
e.printStackTrace();
}
这段代码的请求量非常大,现在出的问题是,aix系统磁盘空间不足时,
当执行Logger.getLogger("").info(TypeUtil.typeToString("req", para));这行
代码时,log4j因空间不足应该跳转到异常,但现在没有,而执行了
result = service.updateBalance(para);
这是为啥?
--------------------编程问答--------------------
log4j 有三种模式:
1、直接写文件方式,ImmediateFlush=true,每条log直接写入磁盘
2、同步缓存方式,bufferedIO=true,使用一个char[],做缓存,默认8k,每次写满这个缓存,然后flush到磁盘。
3、异步缓存方式,appender换成AsyncAppender即可,默认的缓存是128条记录,使用一个ArrayList来模拟的BlockingQueue,可以设置队列满了是等待还是直接丢弃该数据。额外的启动一个check的线程,从list中获取数据并写入文件。
会不会是因为Logger.getLogger("").info()的执行,并没有等日志信息写进文件就结完成了,继续执行下行的代码? --------------------编程问答-------------------- 我的log4j.properties 没有配置同步缓存,应该是直接flush的,当空间不足时,应该跳转到异常那一步的,这是为啥?
补充:Java , Java SE