当磁盘空间不足时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);
这是为啥?


...全文
146 点赞 收藏 2
写回复
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()的执行,并没有等日志信息写进文件就结完成了,继续执行下行的代码?
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告