- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去,我们有 ThreadLocal
让程序在请求路径中携带数据,因为所有请求处理都是在该线程上完成的,Logback 之类的东西将其与 MDC.put("requestId", getNewRequestId());
一起使用
然后 Scala 和函数式编程出现了,Future
s 和他们一起来了 Local.scala
(至少我知道 twitter Future
有这个类)。 Future.scala
了解Local.scala
并通过所有 map
传输上下文/flatMap
等等等等功能,我仍然可以做Local.set("requestId", getNewRequestId());
然后在它经过许多线程后进入下游,我仍然可以使用 Local.get(...)
访问它
太好了,我的问题是在 Java 中,我可以用新的 CompletableFuture
做同样的事情吗?某处有 LocalContext
或某些对象(不确定名称),通过这种方式,我可以修改 Logback MDC 上下文以将其存储在该上下文中,而不是 ThreadLocal
这样我就不会丢失请求 ID 和我在 thenApply
中的所有日志, thenAccept
等等等等仍然可以很好地使用日志记录和-XrequestId
Logback 配置中的标志。
编辑:
举个例子。如果你有一个请求进来并且你正在使用 Log4j 或 Logback,在一个过滤器中,你将设置 MDC.put("requestId", requestId)
然后在您的应用程序中,您将记录许多日志语句:
log.info("request came in for url="+url);
log.info("request is complete");
INFO {time}: requestId425 request came in for url=/mypath
INFO {time}: requestId425 request is complete
ThreadLocal
的技巧为达到这个。在 Twitter,我们使用 Scala 和 Twitter
Future
Scala 中的 s 以及
Local.scala
类(class)。
Local.scala
和
Future.scala
联系在一起,因为我们仍然可以实现上述场景,这非常好,我们所有的日志语句都可以记录请求 ID,因此开发人员永远不必记住记录请求 ID,您可以跟踪单个客户的请求响应周期那个身份证
最佳答案
如果你遇到这个,只需戳这里的线程
http://mail.openjdk.java.net/pipermail/core-libs-dev/2017-May/047867.html
实现类似 twitter Futures 的东西,它传输本地变量(很像 ThreadLocal,但传输状态)。
请参阅此处的 def respond() 方法以及它如何调用 Locals.save() 和 Locals.restore()
https://github.com/simonratner/twitter-util/blob/master/util-core/src/main/scala/com/twitter/util/Future.scala
如果 Java Authors 能解决这个问题,那么 logback 中的 MDC 将适用于所有 3rd 方库。在那之前,除非您可以更改 3rd 方库,否则它将无法正常工作(怀疑您是否可以这样做)。
关于java-8 - CompletableFuture 是否有对应的本地上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933713/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!