需要在之前的每个日志中添加params - 在java中的log4j中

时间:2018-02-13 06:10:01

标签: java log4j log4j2

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

如果查看其中一个日志输出: " 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。 注意:params从log到log不等我可以通过logger.info传递它们。 任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您可能正在寻找自定义布局。以下文章应该对您有所帮助简而言之,创建自定义布局,设置自己的转换字符并相应地处理日志消息(& object var args),以使用适当的动态值替换转换字符。

http://www.wideskills.com/log4j-tutorial/10-custom-appender-and-layout-in-log4j

https://fw-geekycoder.blogspot.in/2010/07/creating-log4j-custom-patternlayout.html

OR

你可以在log4j / log4j2中尝试MDC / ThreadContext。这将允许您通过简单的Map& amp;提供动态的日志信息。使用自定义模式字符串在日志布局中使用它。请看下面这方面的文章 -

http://www.baeldung.com/mdc-in-log4j-2-logback

答案 1 :(得分:0)

通过在log4j2.xml或log4j2.properties文件中使用ThreadContext和pattern获得预期的输出。请找到下面的代码。 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));
}
}