Java 如何格式化日志消息

Java 如何格式化日志消息,java,logging,Java,Logging,在控制台上打印之前,我想格式化日志消息 e、 g.如何格式化“{0}有{1}个苹果与他在一起”,因此输入是John和10 我更喜欢提供解决方案的日志框架,我不想单独格式化这些消息。JDK6特定的日志类似乎没有这些粒度。只需使用String.format: String.format ("%s has %s apples with him", "John", "10"); 使用: 或: 即使只使用JDK日志记录,您也可以使用自定义设置来处理带有参数的日志消息格式 举个(过于简单的)例子:

在控制台上打印之前,我想格式化日志消息

e、 g.如何格式化“{0}有{1}个苹果与他在一起”,因此输入是John和10


我更喜欢提供解决方案的日志框架,我不想单独格式化这些消息。JDK6特定的日志类似乎没有这些粒度。

只需使用
String.format

String.format
   ("%s has %s apples with him", "John", "10");
使用:

或:


即使只使用JDK日志记录,您也可以使用自定义设置来处理带有参数的日志消息格式

举个(过于简单的)例子:

然后,要使用它,您可以配置
logging.properties
文件,其中包括:

java.util.logging.ConsoleHandler.formatter = com.example.MyFormatter

如果您使用,您可以编写:
log.debug(“{}有{}个苹果和他在一起”,“John”,10)
SLF4J有一个重定向回
java.util.logging
的绑定。请重新表述问题。标记化是将字符串分解为组成部分,并生成输出而不是输入。您的示例表明您正在询问如何格式化,而不是标记化。对于这样的简单情况,您可以省去
1$
2$
,使用
%s有%d个苹果“
表示
String.format()
+1 for MessageFormat-我能够将我的所有日志语句转换为使用MessageFormat将非常轻松。直接用于日志记录时,format将有性能损失
String s = String.format("%1$s has %2$d apples with him", "John", 10);
public class MyFormatter extends Formatter {

    /**
     * @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
     */
    @Override
    public String format(final LogRecord record) {
        return MessageFormat.format(record.getMessage(), record.getParameters());
    }
}
java.util.logging.ConsoleHandler.formatter = com.example.MyFormatter