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