当磁盘空间不足时log4j的问题

pdw2009 2013-11-27 05:38:06
程序结构:
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);
这是为啥?


...全文
573 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pdw2009 2013-11-27
  • 打赏
  • 举报
回复
我的log4j.properties 没有配置同步缓存,应该是直接flush的,当空间不足时,应该跳转到异常那一步的,这是为啥?
pdw2009 2013-11-27
  • 打赏
  • 举报
回复
log4j 有三种模式: 1、直接写文件方式,ImmediateFlush=true,每条log直接写入磁盘 2、同步缓存方式,bufferedIO=true,使用一个char[],做缓存,默认8k,每次写满这个缓存,然后flush到磁盘。 3、异步缓存方式,appender换成AsyncAppender即可,默认的缓存是128条记录,使用一个ArrayList来模拟的BlockingQueue,可以设置队列满了是等待还是直接丢弃该数据。额外的启动一个check的线程,从list中获取数据并写入文件。 会不会是因为Logger.getLogger("").info()的执行,并没有等日志信息写进文件就结完成了,继续执行下行的代码?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧