如何添加uuid到log4j登录到文件?

时间:2017-05-16 10:47:47

标签: java logging configuration log4j logstash

我有这个log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
<Appenders>
    <File name="FILE" fileName="logfile.log" append="true">
        <PatternLayout pattern="%p | [%t] %l | message : %m%n"/>
    </File>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%p | [%t] %l | message : %m%n"/>
    </Console>
</Appenders>
</Configuration>

我的目标是在RestEndpoint中添加一个与uuid唯一的id,但我不知道如何添加到xml文件......或者我必须在xml文件中配置它?

2 个答案:

答案 0 :(得分:3)

在你的应用程序中,将uuid放在ThreadContext中:

ThreadContext.put("myUuid", new UUID());

我假设您知道应用程序中的入口点在哪里放置和删除它们。

在配置中,使用%X模式转换器从ThreadContext中提取UUID :(还将Loggers添加到您的配置中)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
    <File name="FILE" fileName="logfile.log" append="true">
        <PatternLayout pattern="%p | [%t] %l | id: %X{myUuid} | message : %m%n"/>
    </File>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%p | [%t] %l | id: %X{myUuid} | message : %m%n"/>
    </Console>
</Appenders>

<Loggers>
  <Root level ="trace">
    <AppenderRef ref="STDOUT" />
    <AppenderRef ref="FILE" />
  </Root>
</Loggers>
</Configuration>

答案 1 :(得分:0)

感觉还有另一个解决方案,如果您需要的只是每个日志记录的唯一ID,则更容易。在Log4j doc中检查UUID 唯一的更新是更改xml文件中的布局是添加%u{"RANDOM"}

示例xml配置

<PatternLayout>
    <pattern>%d{DATE} [%p] UUID:%u{"RANDOM"} (%t) %c: %m%n</pattern>
</PatternLayout>