SSH 统一日志管理

系统包括普通日志以及服务调用日志两块,普通日志暂时通过日志拦截器统一处理,服务调用日志直接写在webservice接口中,暂有两点困惑:

1、struts拦截器处理完成日志统一管理,若要让日志拦截器捕获action异常并将日志存储至DB,只能在action中将所有Exception抛出吗,感觉不是很好,是否有隐患(之前试过用aop记录日志,不过那样的话记录操作都在service层了,访问一个action方法若包含多个service操作则会产生多条日志,没必要;配置aop的execute参数为action的话,运行时会生成代理类而找不到对应的action方法,于是就弃用了,研究不深也可能是本人配置的问题。)

2、服务端接收webservice调用时日志管理涉及的事务问题,服务端处理用try..catch..块,异常日志操语句在catch块中,假若在try块中存在数据库操作并抛出异常,事务将会回滚并直接影响到catch块中的日志存储语句也不能提交,该如何处理。。

×××××××××××××××××××××××××××问题一×××××××××××××××××××××××××××××××
之前一直采用直接在action方法中记录日志:

public String toBindAppUsers(){
	try {
		applist = ptXrsqService.getAllValidApps(null);
		info(XXX);
	} catch (Exception e) {
		e.printStackTrace();
		error(XXX);
	}
	return SUCCESS;
}

现采用日志拦截器:

try {
	//......省略业务代码........
        invocation.invoke();
        //************日志拦截正常信息************
        ptLoginfoService.saveLog(××××);
	//..........................			
} catch (Exception e) {
        //************日志拦截异常信息************
        ptLoginfoService.saveLog(××××);
}


采取这种方案后,若action方法的写法不变,那try块中调用service的操作若抛出异常,则会在当前action方法被捕获,在拦截器中无法进入catch块,将action中的写法改成抛出形式(如下),在拦截器中才能捕获并存储异常日志;

public String ptLoginManage() throws Exception{
	ResultPage rp = ptLoginService.getPtLoginPages(this.getPage(), this.getPageRows());
	return SUCCESS;
}


总感觉所有的action方法都直接throws,隐隐觉得有什么不妥的,可能只是习惯问题了。
××××××××××××若哪位兄台有好的解决方法,求探讨分享××××××××××××××××××



×××××××××××××××××××××××××××问题二×××××××××××××××××××××××××××××××
下面是一个对外的webservice方法的代码段,同样包含了日志记录部分:

public String syncAddAppRights(String yyid, String str) {
try{
	//...省略业务代码...
	
	PtAppRight right = ptRightService.getPtAppRightByCode(yyid, rightid);
	
	//...省略业务代码...
	String info = "Added ["+add+"] Right(s), ["+exists+"] Right(s) already exists.";
	
	ptLoginfoService.savePtWebServiceLog(0, yyid, "新增系统权限", info);
} catch (Exception e) {
	ptLoginfoService.savePtWebServiceLog(1, yyid, "新增系统权限",   "ERROR :"+e.toString());
	e.printStackTrace();
}

其中的ptRightService、ptLoginfoService均为spring统一管理的服务bean,当调用ptRightService.getPtAppRightByCode(yyid, rightid)时,若该方法抛出数据库操作异常,程序能够正常进入catch块,也能进入ptLoginfoService.savePtWebServiceLog方法,但是事务本身会应该前面的异常而回滚。


在不影响现有的事务配置的前提下,有没有什么办法达到如代码所示的效果呢,google中.....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值