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