use*_*976 8 java logging logback playframework playframework-2.0
我们有一个巨大的遗留代码,复杂的流程具有同步和异步操作.因此,我们需要在所有日志消息中记录特定请求的唯一ID,其中执行的操作在不同的线程中运行,并且线程在多个执行上下文中.
我尝试使用MDC并在logger.xml中指定 - %X {req_id}并使用自定义akka调度程序在下面提到的博客中给出解决方案,但它不能在多个执行上下文中工作,并且它在单次执行中也不能可靠地工作上下文,有时它返回req_id null.(http://yanns.github.io/blog/2014/05/04/slf4j-mapped-diagnostic-context-mdc-with-play-framework/)
由于复杂而庞大的代码库,因此无法在每个函数调用中传递请求ID.我们有什么方法可以实现这一目标,但变化最小?我们在play框架生成的日志中也需要该请求id.
我有同样的需要,记录一些跟踪令牌以进行调试。Kamon 库已经具有此功能 http://kamon.io/integrations/logback/trace-token-converter/。
在我的 Global.java 中:我Kamon.start()在 onStart() 中执行操作并在 onRequest() 中维护上下文。还可以使用traceTokenin 日志记录模式。
public Action onRequest(Http.Request request, Method actionMethod) {
TraceContext tx = Kamon.tracer().newContext("reqc", new Some<>(Utils.randStr(8)));
Tracer.setCurrentContext(tx);
Logger.info("Request: " + request.toString());
Action x = super.onRequest(request, actionMethod);
tx.finish();
return x;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |