在已记录的消息中逐字打印单引号参数

时间:2017-01-17 07:10:12

标签: java logging

我正在尝试使用java.util.logging.Logger.log(Level, String)方法将一些参数打印到控制台中。但是参数总是逐字打印:

package loggertest;

import java.util.logging.Level;
import java.util.logging.Logger;

public class LoggerTest {
   public static void main(String[] args) {
      final Logger LOGGER = Logger.getLogger(LoggerTest.class.getName());

      LOGGER.log(Level.INFO, "Some info: {0}.", "foo");
      LOGGER.log(Level.INFO, "Some quoted info: '{0}'.", "foo");
   }
}

当我在Netbeans中运行时,输出为:

Jan 17, 2017 12:13:43 PM loggertest.LoggerTest main
INFO: Some info: foo.
Jan 17, 2017 12:13:43 PM loggertest.LoggerTest main
INFO: Some quoted info: {0}.

显然,当我们在单引号内使用参数(即'{0}')时,它们会逐字打印。为什么会发生这种情况?我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

出现此问题的原因是java.text.MessageFormatbeing used

引用MessageFormat

  

String中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串"'{0}'"表示字符串"{0}",而不是FormatElement。单引号本身必须在整个String中用双引号''表示。

所以,解决方法就是:

LOGGER.log(Level.INFO, "Some correctly quoted info: ''{0}''.", "foo");

这将打印:

Jan 17, 2017 12:37:58 PM loggertest.LoggerTest main
INFO: Some correctly quoted info: 'foo'.