我希望能够做到这种魔力:
logger.info("Entering function foo", param1, param2 .... param N);
我想记录(info)我的所有条目到方法,所以以下方式不是很友好(我将花费很多时间来计算{}以查看它的确切数字等。):< / p>
logger.error("Entering function foo, {} {} {} ... {}", param1, param2 .... param N);
我的意思是'不是有更好的方法(请不要方面解决方案)。
答案 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)
如果您有一个模板,例如Window下的下一个模板 - &gt;偏好 - &gt; Java - &gt;编辑 - &gt;模板:
if (LOG.isInfoEnabled()) {
LOG.info("${cursor}: ${formatted_logback_method_parameters});
}
您可以使用当前方法的参数自动生成日志语句。如有必要,将创建一个对象数组。
答案 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制作工厂方法,使其看起来更短)。
这种方法会延迟任何字符串构造,直到它确实需要进行日志记录。在某些情况下可能会有帮助。