log4j2使用CsvParameterLayout,如何在单元格中添加时间戳?

huangapple 未分类评论47阅读模式
英文:

log4j2 using CsvParameterLayout, how to add timestamp in the cells?

问题

我正在使用log4j2的`CsvParameterLayout`进行日志记录。

logger.info("解压阶段日志", "时间戳", "级别", "重命名路径", "指令", "状态", "消息", "层号", "线程号");
logger.info("解压阶段日志...", "????", "信息", newName.getAbsolutePath(), "解压", "成功", "消息...", "层号", Thread.currentThread().getName());

是否有一种简单直接的方法来获取`时间戳`?

<details>
<summary>英文:</summary>

I am using log4j2&#39;s `CsvParameterLayout` to log. 

logger.info("unzipPhase logging", "Timestamp", "Level", "RenamedPath","Instruction","Status", "Message", "Layer#", "Thread#");
logger.info("unzipPhase logging...", "????", "info", newName.getAbsolutePath(),"unzip","success", "Message...", "Layer#",Thread.currentThread().getName());

Is there any simple and direct way to get `Timestamp`?


</details>


# 答案1
**得分**: 0

你可以在`JsonLayout`中使用`KeyValuePair`选项。

请选择并使用以下三种情况之一。

**案例 1. 使用`KeyValuePair`**

1. 在你的配置文件中添加`JsonLayout`。我使用了`log4j2.xml`作为示例。
键是```&lt;KeyValuePair key=&quot;timestamp&quot; value=&quot;$${date:yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ}&quot; /&gt;```
```xml
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Configuration status=&quot;WARN&quot;&gt;
     &lt;Appenders&gt;

        &lt;Routing name=&quot;RoutingAppender&quot;&gt;
            &lt;Routes pattern=&quot;${ctx:logFileName}&quot;&gt;
                &lt;Route&gt;
                    &lt;RollingFile name=&quot;Rolling-${ctx:logFileName}&quot;
                                 fileName=&quot;./logs/${ctx:logFileName}.log&quot;
                                 filePattern=&quot;./logs/${ctx:logFileName}.%i.log.gz&quot;&gt;
                        &lt;JsonLayout&gt;
                            &lt;KeyValuePair key=&quot;timestamp&quot; value=&quot;$${date:yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ}&quot; /&gt;
                        &lt;/JsonLayout&gt;
                        &lt;SizeBasedTriggeringPolicy size=&quot;512&quot; /&gt;
                    &lt;/RollingFile&gt;
                &lt;/Route&gt;
            &lt;/Routes&gt;
        &lt;/Routing&gt;
    &lt;/Appenders&gt;

    &lt;Loggers&gt;
        &lt;Root level=&quot;all&quot;&gt;
            &lt;AppenderRef ref=&quot;RoutingAppender&quot; /&gt;
        &lt;/Root&gt;
    &lt;/Loggers&gt;

&lt;/Configuration&gt;
  1. 运行程序!

  2. 检查输出。
    键是timestamp

{
  &quot;instant&quot; : {
    &quot;epochSecond&quot; : 1588683107,
    &quot;nanoOfSecond&quot; : 556000000
  },
  &quot;thread&quot; : &quot;main&quot;,
  &quot;level&quot; : &quot;INFO&quot;,
  &quot;loggerName&quot; : &quot;com.study.Stackoverflow&quot;,
  &quot;message&quot; : &quot;log printed! - testFile&quot;,
  &quot;endOfBatch&quot; : false,
  &quot;loggerFqcn&quot; : &quot;org.apache.logging.log4j.spi.AbstractLogger&quot;,
  &quot;threadId&quot; : 1,
  &quot;threadPriority&quot; : 5,
  &quot;timestamp&quot; : &quot;2020-05-05T21:51:47.556+0900&quot;
}

参考:属性替换 - date

案例 2. 使用JsonLayout

  1. 在你的配置文件中添加JsonLayout。我使用了log4j2.xml作为示例。
    键是&lt;JsonLayout includeTimeMillis=&quot;true&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Configuration status=&quot;WARN&quot;&gt;
     &lt;Appenders&gt;

        &lt;Routing name=&quot;RoutingAppender&quot;&gt;
            &lt;Routes pattern=&quot;${ctx:logFileName}&quot;&gt;
                &lt;Route&gt;
                    &lt;RollingFile name=&quot;Rolling-${ctx:logFileName}&quot;
                                 fileName=&quot;./logs/${ctx:logFileName}.log&quot;
                                 filePattern=&quot;./logs/${ctx:logFileName}.%i.log.gz&quot;&gt;
                        &lt;JsonLayout includeTimeMillis=&quot;true&quot;&gt;
                        &lt;/JsonLayout&gt;
                        &lt;SizeBasedTriggeringPolicy size=&quot;512&quot; /&gt;
                    &lt;/RollingFile&gt;
                &lt;/Route&gt;
            &lt;/Routes&gt;
        &lt;/Routing&gt;
    &lt;/Appenders&gt;

    &lt;Loggers&gt;
        &lt;Root level=&quot;all&quot;&gt;
            &lt;AppenderRef ref=&quot;RoutingAppender&quot; /&gt;
        &lt;/Root&gt;
    &lt;/Loggers&gt;

&lt;/Configuration&gt;
  1. 运行程序!

  2. 检查输出。
    键是timeMillis

{
  &quot;timeMillis&quot; : 1588688067619,
  &quot;thread&quot; : &quot;main&quot;,
  &quot;level&quot; : &quot;INFO&quot;,
  &quot;loggerName&quot; : &quot;com.edu.test.Stackoverflow&quot;,
  &quot;message&quot; : &quot;log printed! - testFile&quot;,
  &quot;endOfBatch&quot; : false,
  &quot;loggerFqcn&quot; : &quot;org.apache.logging.log4j.spi.AbstractLogger&quot;,
  &quot;threadId&quot; : 1,
  &quot;threadPriority&quot; : 5,
  &quot;test&quot; : &quot;11111&quot;
}

参考:JSONLayout - includeTimeMillis

案例 3. 使用系统属性
抱歉,我无法提供可工作的代码。我不清楚如何在代码中应用它。

参考:系统属性 - log4j2.simplelogShowdatetime

英文:

You can use KeyValuePair option in JsonLayOut.

Please choice and use one among of 3 cases.

CASE 1. Using KeyValuePair

  1. add JsonLayout in your configuration file. I used log4j2.xml.
    The key is &lt;KeyValuePair key=&quot;timestamp&quot; value=&quot;$${date:yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ}&quot; /&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Configuration status=&quot;WARN&quot;&gt;
     &lt;Appenders&gt;

        &lt;Routing name=&quot;RoutingAppender&quot;&gt;
            &lt;Routes pattern=&quot;${ctx:logFileName}&quot;&gt;
                &lt;Route&gt;
                    &lt;RollingFile name=&quot;Rolling-${ctx:logFileName}&quot;
                                 fileName=&quot;./logs/${ctx:logFileName}.log&quot;
                                 filePattern=&quot;./logs/${ctx:logFileName}.%i.log.gz&quot;&gt;
                        &lt;JsonLayout&gt;
                            &lt;KeyValuePair key=&quot;timestamp&quot; value=&quot;$${date:yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ}&quot; /&gt;
                        &lt;/JsonLayout&gt;
                        &lt;SizeBasedTriggeringPolicy size=&quot;512&quot; /&gt;
                    &lt;/RollingFile&gt;
                &lt;/Route&gt;
            &lt;/Routes&gt;
        &lt;/Routing&gt;
    &lt;/Appenders&gt;

    &lt;Loggers&gt;
        &lt;Root level=&quot;all&quot;&gt;
            &lt;AppenderRef ref=&quot;RoutingAppender&quot; /&gt;
        &lt;/Root&gt;
    &lt;/Loggers&gt;

&lt;/Configuration&gt;
  1. Run!

  2. Check the output.
    The key is timestamp.

{
  &quot;instant&quot; : {
    &quot;epochSecond&quot; : 1588683107,
    &quot;nanoOfSecond&quot; : 556000000
  },
  &quot;thread&quot; : &quot;main&quot;,
  &quot;level&quot; : &quot;INFO&quot;,
  &quot;loggerName&quot; : &quot;com.study.Stackoverflow&quot;,
  &quot;message&quot; : &quot;log printed! - testFile&quot;,
  &quot;endOfBatch&quot; : false,
  &quot;loggerFqcn&quot; : &quot;org.apache.logging.log4j.spi.AbstractLogger&quot;,
  &quot;threadId&quot; : 1,
  &quot;threadPriority&quot; : 5,
  &quot;timestamp&quot; : &quot;2020-05-05T21:51:47.556+0900&quot;
}

Reference : Property Substitution - date

CASE 2. Using JsonLayOut

  1. add JsonLayout in your configuration file. I used log4j2.xml.
    The key is &lt;JsonLayout includeTimeMillis=&quot;true&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Configuration status=&quot;WARN&quot;&gt;
     &lt;Appenders&gt;

        &lt;Routing name=&quot;RoutingAppender&quot;&gt;
            &lt;Routes pattern=&quot;${ctx:logFileName}&quot;&gt;
                &lt;Route&gt;
                    &lt;RollingFile name=&quot;Rolling-${ctx:logFileName}&quot;
                                 fileName=&quot;./logs/${ctx:logFileName}.log&quot;
                                 filePattern=&quot;./logs/${ctx:logFileName}.%i.log.gz&quot;&gt;
                        &lt;JsonLayout includeTimeMillis=&quot;true&quot;&gt;
                        &lt;/JsonLayout&gt;
                        &lt;SizeBasedTriggeringPolicy size=&quot;512&quot; /&gt;
                    &lt;/RollingFile&gt;
                &lt;/Route&gt;
            &lt;/Routes&gt;
        &lt;/Routing&gt;
    &lt;/Appenders&gt;

    &lt;Loggers&gt;
        &lt;Root level=&quot;all&quot;&gt;
            &lt;AppenderRef ref=&quot;RoutingAppender&quot; /&gt;
        &lt;/Root&gt;
    &lt;/Loggers&gt;

&lt;/Configuration&gt;
  1. Run!

  2. Check the output.
    The key is timeMillis.

{
  &quot;timeMillis&quot; : 1588688067619,
  &quot;thread&quot; : &quot;main&quot;,
  &quot;level&quot; : &quot;INFO&quot;,
  &quot;loggerName&quot; : &quot;com.edu.test.Stackoverflow&quot;,
  &quot;message&quot; : &quot;log printed! - testFile&quot;,
  &quot;endOfBatch&quot; : false,
  &quot;loggerFqcn&quot; : &quot;org.apache.logging.log4j.spi.AbstractLogger&quot;,
  &quot;threadId&quot; : 1,
  &quot;threadPriority&quot; : 5,
  &quot;test&quot; : &quot;11111&quot;
}

Reference : [JSONLayout - includeTimeMillis](https://logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout)

CASE 3. Using System Property
Sorry, I couldn't make working code. I don't know how could I adopt it in code.

Reference : System Properties - log4j2.simplelogShowdatetime

huangapple
  • 本文由 发表于 2020年5月4日 20:42:33
  • 转载请务必保留本文链接:https://java.coder-hub.com/61592468.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定