问题标签 [mdc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asynchronous - 如何将请求过滤器中设置的 MDC 值与 apache camel 线程池一起使用?
我目前面临的问题是我的日志提供了虚假信息。为一个请求设置的 MDC 值与其他请求生成的日志一起记录。
我知道这个问题正在发生,因为我在我的场景中使用骆驼并行处理。有没有其他人遇到过类似的问题,它是如何解决的?
使用 apache camel 处理 Web 请求时,这似乎是一个常见问题,但我在 Web 上没有看到足够的信息。
我将非常感谢这方面的任何帮助。谢谢
scala - Akka 拦截具有可堆叠行为的接收
Akka 和 Scala 新手在这里,请随时根据需要编辑问题,以便清楚地表达我在 Scala 和 Akka 领域的意图。
在展示代码片段之前,我要解决的问题是:我本质上想开发一个通用模块供我的团队在使用 Akka Actor 开发应用程序时使用。我想让他们混合一个特征,这将在运行时扩展他们的接收功能,主要用于日志记录。我遇到了编译错误,我很快就会解释。
但首先,以一个简单的 main 为例:
这是一个团队成员可能在其应用程序中实现的参与者的示例实现:
这是一个示例,说明我将如何为他们提供一个共同的特征来混合:
如您所见,如果消息恰好是字符串,我正在尝试将数据添加到 MDC(一个基本示例,实际上,我会检查我们自己的一些自定义类型)。
我得到的错误是:
这里有什么问题?可堆叠的特征是否有权离开以实现这样的目标?如果没有,最惯用的方法是什么?
更一般地说,除了“拦截器”模式之外,这里是否应用了另一种模式?
感谢所有的帮助!
scala - Scala Akka 使用 SLF4J MDC 进行日志记录
我正在配置我的 Akka 应用程序以使用此处指定的 SLF4J 记录器:
http://doc.akka.io/docs/akka/2.3.4/scala/logging.html
在引擎盖下,我依靠 Logback 来进行日志记录。我正在开发一个用于记录目的的通用模块,用户可以在其参与者系统中使用该模块。主要是,我正在创造一个他们可以混合的特征。
我有一个特点:
我有这样的东西:
我有一些额外的逻辑会将 MDC 值添加到 DiagnosticLoggingAdapter 的 MDC。现在的问题是:如果用户想要混入他们的非参与者类,我会完全公开一个不同的记录器。所以我可能有这样的事情:
我希望 MDC 值能够延续到此记录器。例如,如果我将 MDC 值放入我的 DiagnosticAdapterLogger,我应该期望能够从 org.slf4j.MDC 中获取这些值
如何以干净的方式实现这一目标?
谢谢!
cluster-computing - JBoss6 上的 MDC 混合会话数据
在使用 MDC 时,我们在 JBoss 6.1 中有一个非常奇怪的行为。我们的应用程序是一个 SOAP Web 服务,在连接到该服务后,我们会生成一个唯一的事务 ID,我们在 MDC 中设置该事务 ID 用于记录日志。
现在,当我在本地计算机上以独立模式运行服务器时,这可以正常工作。它似乎在属于两服务器集群的另一台服务器上工作正常。另一台机器不能正常工作。然后我们在同一个集群中还有六台服务器无法正常工作。
发生的情况是 MDC.put 设置的唯一事务 id 在线程之间混淆了。一旦新客户端连接到服务并获得新的事务 ID,所有其他活动会话都会获得相同的事务 ID。当会话结束并且我们从该会话中删除 MDC 事务 id 时,它会从所有活动会话中删除。
我完全不知道如何解决这个问题,因为我无法在我的本地机器上重现这个问题。在有两台机器的集群中,一台工作,另一台不工作,我在 JBoss 配置中可以找到没有区别。
有没有人对如何追踪问题的实际问题有任何建议?
谢谢
regex - Logback 替换正则表达式以检测空值
我正在尝试使用 logback 的替换功能来不在我的 MDC 日志模式中打印空值。 http://logback.qos.ch/manual/layouts.html#replace
我正在尝试从这里 http://logogin.blogspot.com/2013/04/logback-mdc-and-empty-values.html遵循一个示例
一些背景
在 90% 的时间里,我的日志模式都会打印
在 5% 的时间内打印
这是因为在后一种情况下不需要在 MDC 上提供 emp 和 org。对于这些情况,我希望 emp: 和 org: 根本不存在于日志行中。
期望的
替换的可能解决方案
这是我的变量和我正在使用的附加程序。这个想法是 mdcPattern 将解析为没有 emp 和 org 值的空字符串。
但是替换正则表达式不起作用。我将日志行视为:
我的正则表达式有点弱。我似乎无法理解为什么替换模式会出现在我的日志行中。任何帮助是极大的赞赏。
java - 我们可以在 JAVA 中使用 MDC 进行非日志记录吗
MDC.put('item', 'xxxx') MDC.get('item')
谢谢希夫
web-applications - Log4j2:无法使用 Servlet 上下文侦听器设置 MDC 键
我正在尝试使用 Servlet 上下文侦听器将主机名设置为 MDC 变量。MDC 变量仅在侦听器本身中可用,但如果我尝试从其他 servlet 登录,它就会消失。
这是我的监听器代码:
这是我的 web.xml:
有什么建议吗?谢谢。
java - 并行测试中的控制台输出显示在不同的测试树中,而不是在
我在 Intellij IDEA 13.4、logback 1.1.2 中使用 TestNG 6.8.8。我有一堆测试类,并且有这样的 xml 启动器:
此外,每个类都有不同测试类的 MDC 标记:
和 logback.xml:
当我将 xml runner 更改为 thread-count="1" 时,一切都很好 - 控制台将每个测试记录在它自己的树节点中。
但是当我使用 thread-count="3" 或更多运行 TestNG 时,一些日志条目不会显示在他们自己的测试树节点中,而是显示在其他一些日志条目中。
例如,测试“test1”的树节点中的控制台输出可以是:
因此,ExampleClass2 类的日志条目显示为 ExampleClass1 的执行结果,而测试“test2”的树节点中的控制台输出为空。此外,控制台输出的 xml 导出显示,一些日志值用于不同的测试结果。
Intellij 如何为每个测试负责的输出线设计?有没有办法强制 Intellij IDEA 以某种方式检查哪个日志条目哪个类由 MDC 标记负责?还是有任何其他方法可以确保控制台输出位于测试树中?
java - SLF4J MDC Memory Leak
I've had a google for this, looked at multiple suggestions and nothing seems to help.
I have a JAX-RS application which using MDC, when an endpoint is hit sets a transactionId in order to make debugging easier. However, when i stop or restart Tomcat the logs are filled with entries like this:
27-Sep-2014 09:42:14.858 SEVERE [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoader.checkThreadLocalMapForLeaks The web application [/core-1.0.0-RC2] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@464437fc]) and a value of type [java.util.Hashtable] (value [{siteCode=000tst, transactionId=dc8f3a1b-1d7a-4f91-abf6-58d015632d03}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
I have a RequestFilter where MDC is called:
These are my sl4fj dependencies:
If I have a ResponseFilter with MDC.clear() It removes the values from the MDC, but doesn't seem to clear the thread:
27-Sep-2014 09:12:58.216 SEVERE [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoader.checkThreadLocalMapForLeaks The web application [/core-1.0.0-RC2] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@391216c7]) and a value of type [java.util.Hashtable] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Apparently it was fixed in log4j 1.2.17 but the changes don't seem to have filtered through to slf4j.
java - log4j FileAppender 是线程安全的吗?我可以即时更改文件名吗?
我运行一个部署在 Tomcat 中的 Java webapp。我们commons-logging
用作包装器log4j v1.2.16
我们有许多并发请求访问服务器,并且不希望调试/跟踪记录每个请求。但是,对于某些用户,出于调试原因,我们希望跟踪他们的交易。我们维护一个列表,从数据库驱动,其中用户要跟踪。当请求命中时,我们检查我们的列表以查看是否应该跟踪。
他们在 GET 字符串中传递他们的用户名,我们可以毫无问题地得到它,将其添加到 中MDC
,然后通过ConversionPattern
.
我们现在希望为我们跟踪的每个用户创建一个文件,我对此的解决方案是创建一个RollingFileAppender
所有日志记录都指向的自定义扩展。
如果日志级别是trace
我们检查MDC.get("traceOn")
是否应该输出。
然后我执行以下操作(肮脏的示例):
我知道 MDC 是基于每个线程的,但是在生产中运行它是否安全,有 10 个并发线程日志记录并可能写入它们自己的文件?
如果不是 - 我怎么能实现同样的事情 - 基于 MDC 写入多个日志文件(我们是否应该记录,如果是,则使用文件名)?