Java:如何使用类似日志的模式格式化字符串?

Java:如何使用类似日志的模式格式化字符串?,java,string,logging,formatting,string-formatting,Java,String,Logging,Formatting,String Formatting,有时需要使用类似日志记录的模式组合字符串: 出了问题,detailA={},detailB={} 但不是为了记录,而是为了其他目的(如通过网络发送) 有时会导致代码重复,如下所示: logger.info("Something went wrong, detailA={}, detailB={}", detailA, detailB)); otherSystem.info(String.format("Something went wrong, detailA=%s, detailB=%s",

有时需要使用类似日志记录的模式组合字符串:

出了问题,detailA={},detailB={}

但不是为了记录,而是为了其他目的(如通过网络发送)

有时会导致代码重复,如下所示:

logger.info("Something went wrong, detailA={}, detailB={}", detailA, detailB));

otherSystem.info(String.format("Something went wrong, detailA=%s, detailB=%s",
  detailA, detailB);

这是非常不方便和容易出错的。如何使用日志模式和类似API的日志设置字符串格式?

如果使用
slf4j
,则可以使用其
MessageFormatter.arrayFormat
,它返回一个
FormattingTuple

FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
然后将其转换为字符串

String msg = ft.getMessage();
这意味着您可以为此添加实用程序方法

static String format(String format,String...params){
    FormattingTuple ft = MessageFormatter.arrayFormat(format,params);
    String message = ft.getMessage();
    return message;
}

System.out.println(format("hi {}, you {}","there","rock"));

也许没有什么好主意:为日志调用创建一个包装器(一个接受消息和替换参数的方法)有意义吗。。。然后调用logger.info和otherSystem.info?