slf4j日志方法参数 - 一般方法?

时间:2013-12-02 16:41:41

标签: java spring logging log4j slf4j

我希望能够做到这种魔力:

logger.info("Entering function foo", param1, param2 .... param N);

我想记录(info)我的所有条目到方法,所以以下方式不是很友好(我将花费很多时间来计算{}以查看它的确切数字等。):< / p>

logger.error("Entering function foo, {} {} {} ... {}", param1, param2 .... param N);

我的意思是'不是有更好的方法(请不要方面解决方案)。

3 个答案:

答案 0 :(得分:0)

你能做的就是写一个小实用程序:

logger.error("Entering function foo, " + params(N), param1, param2 .... param N);

static String params(int length) {
  StringBuilder sb = new StringBuilder();
  for(int i = 0; i < length; i++) {
    sb.append("{} ");
  }
}

这很难看,但我想不出使用纯SLF4J的更好方法。具体实施可能会提供更好的解决方案。或者,执行以下操作:

logger.error("Entering function foo, {}", Arrays.asList(param1, param2 .... param N));

如果您可以接受此格式更改。

答案 1 :(得分:0)

你正在使用eclipse吗? eclipse-log-param plugin可以帮助您。

如果您有一个模板,例如Window下的下一个模板 - &gt;偏好 - &gt; Java - &gt;编辑 - &gt;模板:

Template in eclipse

if (LOG.isInfoEnabled()) {
    LOG.info("${cursor}: ${formatted_logback_method_parameters});
}

您可以使用当前方法的参数自动生成日志语句。如有必要,将创建一个对象数组。

Using the template

答案 2 :(得分:0)

我相信如果在大多数情况下你关闭了这样的日志记录,这种方法将花费你最少的开销:

psuedo代码:

class LogParams {
    private Object[] params;
    public LogParams(Object... params) {
        this.params = params;
    }

    public String toString() {
        if (params == null || params.length == 0) {
             return "";
        }
        StringBuilder sb = new StringBuilder();
        for (Object p : params) {
            sb.append(p).append(" ");
        }
        return sb.toString();
    }
}

在您的代码中,您只需执行

logger.info("Entering function, params: {}", new LogParams(p1, p2, p3, p4..., pn));

(您可以为LogParams制作工厂方法,使其看起来更短)。

这种方法会延迟任何字符串构造,直到它确实需要进行日志记录。在某些情况下可能会有帮助。