标签: mdc

Log4j SyslogAppender是否支持MDC和NDC

简单来说,Log4j SyslogAppender是否支持MDC和NDC,因为输出是结构化数据,即使用协议的结构化数据功能?

此外,对于可以放入MDC并成功附加到日志中的内容是否有任何限制?

log4j syslog ndc structured-data mdc

4
推荐指数
1
解决办法
3364
查看次数

使用slf4j(和log4j)传递日志事件特定数据

有没有办法通过slf4j传递适用于当前日志事件的更多信息?可以通过MDC存储和访问基于请求的信息,如用户,IP地址或应用程序名称.稍后我可以在布局或转换器中访问该信息,而不必解析日志消息.如果我使用基于JSON的格式,我有另一个字段,"appName":myApp如果我在plaint文本中使用log4j登录,我可以通过%{appName}符号访问它.有没有办法通过适用于一个日志事件的信息来实现这一目标?例如,我想传递一个异常ID(即使是我不拥有的异常).最好但仍然难看的解决方案是将id传递给MDC,记录异常并在之后删除它.有谁知道更好的解决方案?

java logging slf4j mdc

4
推荐指数
1
解决办法
1343
查看次数

Logback 替换正则表达式来检测空值

我正在尝试使用 logback 的替换功能,以免在我的 MDC 日志模式中打印空值。 http://logback.qos.ch/manual/layouts.html#replace

我试图遵循这里的示例 http://logogin.blogspot.com/2013/04/logback-mdc-and-empty-values.html

一些背景

90% 的时间我的日志模式都会打印

2014-08-28 11:30:27,014  emp:Peter org:IT Expense submitted
Run Code Online (Sandbox Code Playgroud)

打印时间的 5%

2014-08-28 11:30:27,014  emp: org: Cleanup jobs.
Run Code Online (Sandbox Code Playgroud)

这是因为在后一种情况下,不需要在 MDC 上提供 emp 和 org。对于这些情况,我希望 emp: 和 org: 根本不出现在日志行中。

期望的

2014-08-28 11:30:27,014  Cleanup jobs.
Run Code Online (Sandbox Code Playgroud)

可能的解决方案是更换

这是我的变量和我正在使用的附加器。这个想法是,对于没有 emp 和 org 值的情况, mdcPattern 将解析为空字符串。

<variable scope="context" name="mdcPattern" value="%replace( emp:%X{empName} org:%X{orgName} ) {'[a-z]+:( |$)', ''}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d ${mdcPattern} %thread %-5level %logger{25} - %msg%n</pattern>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

但是替换正则表达式不起作用。我看到日志行为:

2014-08-28 11:30:27,014  emp: org: {'[a-z]+:( |$
Run Code Online (Sandbox Code Playgroud)

我的正则表达式有点弱。我似乎无法理解为什么替换模式会按原样出现在我的日志行中。任何帮助是极大的赞赏。

regex logback mdc

4
推荐指数
1
解决办法
5844
查看次数

使用 MDC 或 Threadlocal

当使用 http 调用它们时,我想将从X-Request-IdNginx 接收到的信息传播到 k8s 中的其他服务。

现在,我正在使用请求过滤器来捕获该X-Request-Id标头并将其放入 MDC。

        final String nginxRequestId = requestContext.getHeaderString("X-Request-Id");
        if (nginxRequestId != null) {
            MDC.put("infra_request", nginxRequestId);
        }
Run Code Online (Sandbox Code Playgroud)

现在,我正在 k8s 内调用服务 B 的端点(因此没有 Nginx 的阻碍),我想获取它X-Request-Id以将其放入请求的标头中。我在这里可以看到两个选项:

  1. 只需从 MDC 获取该值即可
  2. 除了将该标头存储在 MDC 中之外,还将该标头存储在线程局部变量中(因为该服务正在使用 Dropwizard)

我可能会使用 MDC 来完成此操作,但我不确定这是否是最佳实践,或者是否存在一些问题/问题。

java thread-local mdc dropwizard

4
推荐指数
1
解决办法
6027
查看次数

如何使用log4j2(xml中的MDC)在不同文件中写入不同的日志?

现在我正在使用这样的结构:Appender:

<RollingFile name="user.log" append="true" fileName="users/%MDC{USERNAME}.txt"
                 filePattern="users/archive/%MDC{USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz">
        <PatternLayout pattern="%-5p %d{MMMM-dd HH:mm:ss} %X: %c - %m%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
    </RollingFile>
Run Code Online (Sandbox Code Playgroud)

记录仪:

    <appender-ref ref="user.log">
        <ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
            <KeyValuePair key="USERNAME" value="%X{USERNAME}"/>
            <KeyValuePair key="IP" value="%X{IP}"/>
        </ThreadContextMapFilter>
    </appender-ref>
Run Code Online (Sandbox Code Playgroud)

但它不适用于MDC密钥.我如何在xml中使用MDC密钥来配置RollingFileAppender?

java configuration logging mdc log4j2

3
推荐指数
1
解决办法
5787
查看次数

Netty 或任何其他非阻塞 IO 服务器上的 Logback MDC

Logback MDC(映射诊断上下文)正在利用 threadLocal(据我所知),以便可以在同一线程执行的所有日志语句上访问它。

我的问题是,logback MDC 是否可以在非阻塞 IO 服务器端运行时(如 Netty 或 Undertow)中工作,因为它曾经在例如 tomcat 中工作?如果是,它是如何工作的,因为 Netty/Undertow 不像 tomcat 那样遵循每个请求一个线程。

我正在尝试在 MDC 中放置一个 traceID,以便我可以在 Splunk/ELK 等集中式日志记录系统中跨多个微服务/管道侦听器的一个事务跟踪中跟踪我的所有日​​志

logback mdc netty spring-boot distributed-tracing

3
推荐指数
1
解决办法
1850
查看次数

日志查看器 - MDC支持

我正在尝试为log4j生成支持MDC的纯文本文件找到日志查看器.我看过像Chainsaw,LogSaw,Otros这样的一些人,但他们似乎只支持NDC.

谁能指出我正确的方向?

logging log4j viewer ndc mdc

2
推荐指数
1
解决办法
429
查看次数

Akka拦截接收具有可堆叠的行为

Akka和Scala新手在这里,请随时编辑这个问题,以便清楚地表达我在Scala和Akka领域的意图.

在我展示代码片段之前,这是我想要解决的问题:我本质上想要为我的团队开发一个通用模块,以便在他们使用Akka actor开发应用程序时使用.我想让它们混合一个特性,它将在运行时扩展它们的接收功能,主要用于记录目的.我遇到了编译错误,我很快就会解释.

但首先,举一个简单的主要内容:

object Test extends App {

   val system = ActorSystem("system")
   val myActor = system.actorOf(Props(new MyActor), "myActor")
   myActor ! "Hello world!"
}
Run Code Online (Sandbox Code Playgroud)

以下是团队成员可能在其应用程序中实现的actor的示例实现:

class MyActor extends Actor with ActorLogger {

   override def receive: Receive = {
       case msg => {
          log.info("testing ...")
       }
       case _ => throw new RuntimeException("Runtime Ex")
   }
}
Run Code Online (Sandbox Code Playgroud)

这是一个如何为他们提供混合的共同特征的例子:

trait ActorLogger extends Actor {

    val log: DiagnosticLoggingAdapter = Logging(this)

    abstract override def receive: Receive = {

         case msg: Any => {
            if (msg.isInstanceOf[String]) { …
Run Code Online (Sandbox Code Playgroud)

scala slf4j interceptor mdc akka

2
推荐指数
1
解决办法
2743
查看次数

具有映射诊断上下文的Golang日志记录

如何在GoLang中实现 MDC日志记录(Java)?

我需要在所有服务器日志中添加UUID,以便能够跟踪并发请求。

go mdc

2
推荐指数
1
解决办法
1218
查看次数

在 spring-boot 中,如何使用应用程序属性记录 MDC?

在我的spring-boot项目中,我使用 Logback-"Mapped Diagnostic Context" MDC来记录诊断上下文。

默认情况下不记录 MDC 数据(到控制台或文件)。

有没有办法仅使用应用程序属性将此 MDC 日志记录到输出日志中?

java logback mdc spring-boot

2
推荐指数
1
解决办法
5315
查看次数

Go中全局线程本地存储的可行性和最佳实践

我是Golang的初学者,我想在Go中实现类似于Java中的映射诊断上下文(MDC)的东西,这是通过线程本地存储来实现的。但是,我发现很难在网上找到有关 Go 中全局线程本地存储的信息。

我有几个问题:

  • 是否可以为Go中的每个goroutine创建一种全局线程本地存储来存储数据和上下文?

  • 尝试实现全局线程局部存储是否被认为是 Go 中的反模式?

  • 是否建议通过在 Go 中实现全局线程本地存储来替代传递上下文的方式?

  • 假设您的选择是,您更喜欢使用传递上下文的方法,还是尝试实现线程本地存储来保存和管理上下文?

我找到了一些对此的参考,但我无法得出结论来决定是否实施它。

multithreading go mdc goroutine thread-local-storage

2
推荐指数
1
解决办法
284
查看次数

带有 CompletableFuture 的 MDC 记录器

我正在使用 MDC Logger,除了一种情况外,它对我来说非常有用。无论我们在代码中的何处使用 CompletableFuture,对于创建的线程,MDC 数据都不会传递到下一个线程,因此日志失败。例如,在我使用以下代码段创建新线程的代码中。

CompletableFuture.runAsync(() -> getAcountDetails(user));
Run Code Online (Sandbox Code Playgroud)

日志结果如下

2019-04-29 11:44:13,690 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor:  service: 
2019-04-29 11:44:13,690 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor: 
2019-04-29 11:44:13,779 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] UserDetailsRepoImpl: 
2019-04-29 11:44:13,950 INFO   [ForkJoinPool.commonPool-worker-3] RestServiceExecutor:  header: 
2019-04-29 11:44:13,950 INFO   [ForkJoinPool.commonPool-worker-3] RestServiceExecutor:  service: 
2019-04-29 11:44:14,012 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data details.
2019-04-29 11:44:14,028 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieved Config Data details : 1
2019-04-29 11:44:14,028 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data …
Run Code Online (Sandbox Code Playgroud)

java slf4j mdc spring-boot completable-future

1
推荐指数
1
解决办法
2565
查看次数