Log4J2在appender中设置params

时间:2016-08-04 15:09:55

标签: java log4j log4j2

使用log4j2如何配置我的PatternLayout以打印除了消息之外的信息,而不是我发送的Map param

       void info(String message, Object... params);

这是我的代码

         Map<String, String> params = new HashMap<>();
        params.put(REMOTE_HOST, request.remoteAddress()
                                       .toString());
        params.put(URI, request.uri());
        params.put(METHOD, request.method()
                                  .toString());
        params.put(REMOTE_HOST, request.remoteAddress()
                                       .toString());
        params.put(REFERER, request.headers()
                                   .get(HttpHeaders.REFERER));
        params.put(USER_AGENT, request.headers()
                                      .get(HttpHeaders.USER_AGENT));
        params.put(STATUS_CODE, Integer.toString(response.getStatusCode()));
        params.put(RESPONSE_CONTENT_LENGTH, response.headers()
                                                    .get(HttpHeaders.CONTENT_LENGTH));
        params.put(TIME, getTime(start, getNano));
        log.info(request.absoluteURI(), params);

和我的Appender

    <File name="requestLog" fileName="request.log" append="false">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n  "/>
    </File>

现在只打印

    2016-08-04 15:57:32.288 [vert.x-eventloop-thread-0] INFO  requestLog - http://localhost:8080/v4/quote

1 个答案:

答案 0 :(得分:1)

您可以使用格式字符串:

log.info("URI: {}, parameters: {}", request.absoluteURI(), params);

在您的代码中,URI被视为格式字符串,但由于它没有占位符,因此它只打印URI并忽略参数。