当前位置:编程学习 > JAVA >>

当磁盘空间不足时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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,