Venus 3.0.2增加Venus调用跟踪日志:
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}
主要在几个地方增加日志:
- 发起Venus 服务请求 (request id=....)
- 接收到服务请求 (receive id=....)
- 接收到回调请求 (callback id=...)
Venus 日志格式:
* debug打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName},params={request Param Json} * Info 打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName} * warn或则error将忽略该日志
原理:
- 客户端: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个长度的字符串打印出来。
相关Log4j配置
<logger name="venus.tracer" additivity="true"> <level value="debug"/> <appender-ref ref="CONSOLE"/> </logger>