View Source

Venus 3.0.2增加Venus调用跟踪日志:
{code}2013-10-21 11:14:48,385 DEBUG venus.tracer - receive id=d6863646-6b87-4e53-8d70-41068fc875e3,service=HelloService.sayHello,params={name:jack}
2013-10-21 11:14:48,394 DEBUG venus.tracer - receive id=f891fddf-537c-4195-82ea-d1d9384a2794,service=HelloService.sayAsyncHello,params={name:jack}
method sayAsyncHello invoked
2013-10-21 11:14:48,418 DEBUG venus.tracer - receive id=1e986970-0235-403d-a33b-ec9208781039,service=HelloService.sayHelloCallback,params={name:jack,callback:com.meidusa.venus.notify.ReferenceInvocationListener@28f19d6e}
2013-10-21 11:16:27,853 DEBUG venus.tracer - receive id=35fcb9ae-deb1-4b5e-abdf-707d49c826ef,service=HelloService.getHello,params={name:Jack}{code}

h4. 主要在几个地方增加日志:

* 发起Venus 服务请求 (request id=....)
* 接收到服务请求 (receive id=....)
* 接收到回调请求 (callback id=...)

h4. Venus 日志格式:
{code}* debug打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName},params={request Param Json}
* Info 打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName}
* warn或则error将忽略该日志{code}



h5. 原理:


# 客户端:Venus通过ThreadLocal判断当前是否有请求表示初始请求的UUID,如果不存在则产生byte\[16\]数组,存储在com.meidusa.venus.util.ThreadLocalMap, Key="REQUEST_TRACE_ID",每次发起请求,则将这byte\[16\]通过数据包传输
# 服务端:接受到Venus客户端的请求,则解析数据包,获取byte\[16\],存储在com.meidusa.venus.util.ThreadLocalMap,以方便该线程的Venus调用使用,如果在该线程进行二次Venus调用,那么可以将这个byte\[16\] 带入这次请求
# 重置UUID:单线程或者后台系统如何分离不同的Venus请求? 每次调用Venus,如果一次调用作为一个完整的Venus调用,需要通过 com.meidusa.venus.util.ThreadLocalMap类 调用reset() 方法来清理 ThreadLocalMap中的byte\[\]
# 日志输出:通过UUID类,生成36个长度的字符串打印出来。



h4. 相关Log4j配置


{code:lang=xml} <logger name="venus.tracer" additivity="true">
<level value="debug"/>
<appender-ref ref="CONSOLE"/>
</logger>{code}