Java slf4j日志方法参数-通用方法?

Java slf4j日志方法参数-通用方法?,java,spring,logging,log4j,slf4j,Java,Spring,Logging,Log4j,Slf4j,我希望能够做到这一点: logger.info("Entering function foo", param1, param2 .... param N); 我想记录(info)我所有的方法条目,所以下面的方法不是很友好(我将不得不花费大量时间来计算{},看看它是否是准确的数字等等): 我的意思是“难道没有更好的方法(请不要使用方面解决方案)。您可以编写一个小实用程序: logger.error("Entering function foo, " + params(N), param1, pa

我希望能够做到这一点:

logger.info("Entering function foo", param1, param2 .... param N);
我想记录(info)我所有的方法条目,所以下面的方法不是很友好(我将不得不花费大量时间来计算{},看看它是否是准确的数字等等):


我的意思是“难道没有更好的方法(请不要使用方面解决方案)。

您可以编写一个小实用程序:

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("{} ");
  }
}
如果您可以容忍这种格式更改。

您使用的是eclipse吗?我可以帮你

如果在“窗口->首选项->Java->编辑器->模板”下有一个类似于下一个的模板:

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

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


我相信,如果在大多数情况下关闭此类日志记录,这种方法将使您的开销最小:

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创建一个工厂方法,使其看起来更短)

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

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));