java - 需要在 java 的 log4j 之前将参数附加到每个日志

标签 java log4j log4j2

我需要将变量附加到每个日志的记录器中。 必须更新配置 log4J 文件以更新每个日志输出的打印语句。此信息应位于每个日志语句的开头。

如果您查看日志输出之一: “2018-02-02 15:34:43 INFO TestClass:135 - 开始时间戳是:1517585580000,HHmm 是:1533” 我需要编辑“-”之前的部分 即 1533 param1 Param2 时间戳 2018-02-02 15:34:43 INFO TestClass:135 - - 开始时间戳为:1517585580000,HHmm 为:1533。 注意:参数因日志而异,我可以通过 logger.info 传递它们。 谁能帮我解决这个问题吗?

最佳答案

通过在 log4j2.xml 或 log4j2.properties 文件中使用 ThreadContext 和模式,获得了预期的输出。请找到下面的代码。 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>

<!--     Console Appender -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout
        pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %X{param1} %X{param2} %X{param3} - %m%n" />
    </Console>

  </Appenders>
  <Loggers>
    <Root level="all">
      <AppenderRef ref="Console" />
    </Root>
  </Loggers>
</Configuration>

log4j2.properties

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %X{param1} %X{param2} %X{param3} - %m%n

还有

在JAVA文件中

package com.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class Test {
    public static void ThreadContextLoggerCreation(long param1, String param2, String param3) {
        ThreadContext.push(UUID.randomUUID().toString()); // Add the fishtag;
        ThreadContext.put("param1", param1);
        ThreadContext.put("param2", param2);
        ThreadContext.put("param3", param3);
        ThreadContext.pop();
    }

    public static void ThreadContextLoggerClear() {
        ThreadContext.clearAll();
    }
    public static void main(String args[]) {
        Logger logger = LogManager.getLogger(Test.class);
        LogUtil.ThreadContextLoggerCreation(logger, currentTime, customerId, agentLocation, streamId, streamVariant, levelOfDetail);
        logger.info("Current Time of execution(HHmm) is: {}", BatchTimeUtil.convertTimestampToReadableDate(currentTime));
    }
}

关于java - 需要在 java 的 log4j 之前将参数附加到每个日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760477/

相关文章:

java - 使用引用库 Eclipse 进行调试/编译

java - 在 SpringBoot 应用程序的 ControllerAdvice 中访问 HttpSession

java - 带 GUI 的 BlueJ 时钟显示

java - 在 spring mvc 项目中的项目日志文件夹中找不到日志文件

java - Log4J 2 XML 配置未写入文件

java - log4j2 在 spring boot 应用程序中不工作

java - A*寻路算法——找到一条路径,但不是最优的最佳路径

java - 动态创建和销毁日志附加程序

java - kafka-log4j-appender 0.9.0.1 省略了错误的可抛出信息

java - 如何将 ExpressionFilter 迁移到 log4j2?