利用xfire框架拦截器(Handler)实现接口访问日志打印

前景:

            因项目中发布了80+个接口,需要给每个接口加上请求和响应的日志信息。(PS:没日志很蛋疼老是背锅。)给这些接口加上日志信息的同时还必须满足接口功能不受影响。

方案:

            根据研究发现可以使用xfire的handler拦截器实现,原理见如下请求示意图。

xfire接口请求示意图

具体实现:

1.编写JAVA类 继承 org.codehaus.xfire.handler.AbstractHandler 重写 invoke方法。

inHandler


import com.alibaba.fastjson.JSON;
import com.fastunit.util.DateUtil;

import java.lang.reflect.Method;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.exchange.MessageExchange;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.service.OperationInfo;
public class WebserviceServerHandler extends AbstractHandler {
	public void invoke(MessageContext context) throws Exception {
		try {
			print(context);
		} catch (Exception localException) {
		}
	}
	public static void print(MessageContext context) {
		try {
			MessageExchange exchange = context.getExchange();
			OperationInfo opinfo = exchange.getOperation();
			Method requestM = opinfo.getMethod();//获取到客户端请求的接口对象
			//context.getInMessage().getBody() 这里返回的是客户端发送请求的信息
			System.out.println();
			System.out.println();
			//输出请求的接口名称
			System.out.println("===============================" 
			+ DateUtil.getCurrentDatetime() + "====BEGIN REQUEST "+ requestM.getName() 
							 + "=========================================");
			//输出请求的接口参数
			System.out.println("REQUEST PARAMS:\n[METHOD=" + requestM.getName() + "]:\t"
					+ JSON.toJSONString(context.getInMessage().getBody()));
		} catch (Exception localException) {
		}
	}
}

outHandler

import com.alibaba.fastjson.JSON;
import com.fastunit.util.DateUtil;
import java.lang.reflect.Method;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.exchange.MessageExchange;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.service.OperationInfo;

public class WebserviceServerOutHandler extends AbstractHandler {
	public void invoke(MessageContext context) throws Exception {
		try {
			print(context);
		} catch (Exception localException) {
		}
	}

	public void print(MessageContext context) {
		MessageExchange exchange = context.getExchange();
		OperationInfo opinfo = exchange.getOperation();
		Method responseM = opinfo.getMethod();
		System.out.println("RESPONSE MSG:\n[METHOD = " + responseM.getName() + "]:\t"
				+ JSON.toJSONString(context.getOutMessage().getBody()));
		System.out.println("===============================" + DateUtil.getCurrentDatetime() + "====OVER RESPONSE "
				+ responseM.getName() + "=========================================");
	}

}

 2.配置xfire拦截器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
    <service>
          <name>services</name>
          <namespace>http://xxx.com</namespace>
          <serviceClass>com.xxxxx.IServices</serviceClass>
          <implementationClass>com.xxxxx.ServicesImpl</implementationClass>
		  <inHandlers>  
            <handler handlerClass="com.xxx.WebserviceServerHandler"/>  
          </inHandlers>  
		  <outHandlers>  
            <handler handlerClass="com.xxx.WebserviceServerOutHandler"/>  
          </outHandlers> 
          <style>wrapped</style>
          <use>literal</use>
          <scope>application</scope>
     </service>
   
</beans>

3.显示效果

===============================2018-09-19 04:53:27====BEGIN REQUEST connectHost=========================================
REQUEST PARAMS:
[METHOD=connectHost]:	[{"code":"13476165039140","encryption":"0","expiration":"2099-12-31","groupid":"0","host":"218.70.82.202","port":"1000","signature":"302c021405d2a181d2cfdd69659b9599b24e949539eba5d6021458ed9671e6ebe72da05bf7507e5910c95b943a92","version":"1.0.6"},"plmuser","123456","2","5",""]
RESPONSE MSG:
[METHOD = connectHost]:	["1537304007780408"]
===============================2018-09-19 04:53:27====OVER RESPONSE connectHost=========================================

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值