簡體   English   中英

Log4j 2 JSON配置

[英]Log4j 2 JSON Configuration

我有一個XML配置,我想轉換為JSON。 Log4j沒有加載JSON版本,我找不到任何拼寫錯誤。 我的測試代碼只記錄ERROR級別和DEBUG級別消息。 只顯示ERROR消息並且沒有生成文件輸出 - 我假設框架回退到默認初始化而不是JSON文件。

注意:log4j2-test.json文件位於類路徑中。

我使用Apache的log4j的-2.0-beta9二進制這里找到

XML配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="Test">
    <Properties>
        <Property name="Directory">${sys:user.home}/logs</Property>
        <Property name="Filename">test.log</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingFile name="File" 
            fileName="${Directory}/${Filename}" 
            filePattern="${Directory}/${date:yyyy-MM}/test-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <pattern>%d %p %logger{36} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="1 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

和JSON配置是:

{
   "configuration": {
      "name": "Default",
      "properties": {
         "property": {
            "name":"Directory",
            "value":"${sys:user.home}/logs"
         },
         "property": {
            "name":"FileName",
            "value":"test.log"
         }
      },
      "appenders": {
         "Console": {
            "name":"Console",
            "target":"SYSTEM_OUT",
            "PatternLayout": {
               "pattern":"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
            }
         },
         "RollingFile": {
            "name":"File",
            "fileName":"${Directory}/${FileName}",
            "filePattern":"${Directory}/${date:yyyy-MM}/test-%d{MM-dd-yyyy}-%i.log.gz",
            "PatternLayout": {
               "pattern":"%d %p %logger{36} [%t] %m%n"
            },
            "Policies": {
               "SizeBasedTriggeringPolicy": {
                  "size":"1 MB"
               }
            },
            "DefaultRolloverStrategy": {
               "max":"10"
            }
         }
      },
      "loggers": {
         "root": {
            "level":"debug",
            "appender-ref": {
               "ref":"Console"
            },
            "appender-ref": {
              "ref":"File"
            }
         }
      }
   }
}

我找到了問題的解決方案。

事實證明, Log4j 2配置沒有記錄所有必需的依賴項:

JSON支持使用Jackson數據處理器來解析JSON文件。 必須將這些依賴項添加到要使用JSON進行配置的項目中:

 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.7</version> </dependency> 

我相信我對發布的JSON配置進行了額外的更正。 對我來說,這部分會產生問題:

  "properties": {
     "property": {
        "name":"Directory",
        "value":"${sys:user.home}/logs"
     },
     "property": {
        "name":"FileName",
        "value":"test.log"
     }
  },

在我的設置中,這將輸出〜/ logs / $ {FileName}或〜/ $ {Directory} /test.log,這意味着它只是插入其中一個屬性而不是兩者。

我從中得出結論,沒有以JSON格式正確指定屬性。 為了解決這個問題,我將屬性指定為JSON數組

    "properties": {
        "property": [{
            "name":"Directory",
            "value":"${sys:user.home}/logs"
        },
        {
            "name":"FileName",
            "value":"test.log"
        }]
    },

有了這個,它似乎解決了問題並正確輸出到〜/ logs / test.log

我的設置是Mac上的log4j2 2.0.2和tomcat 7.0.55

你有另一個可能會抓住你的缺陷,我遇到了log4j json。

"appender-ref": {
    "ref":"Console"
},
"appender-ref": {
    "ref":"File"
}

試試這個,就像現在一樣,它只會捕獲一個appender。

"appender-ref": [{
    "ref":"Console"
},
{
    "ref":"File"
}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM