好的,两个样本摘录:
首先:
boolean var = false;
log.log( Level.WARNING, "Cant {0}", new Object[] { var } );
输出:
Can't false
第二
boolean var = false;
log.log( Level.WARNING, "Can't {0}", new Object[] { var } );
输出:
不能{0}
为什么包含撇号(')会导致记录器不扩展令牌?
答案 0 :(得分:4)
看来您使用的任何日志记录机制都在内部使用MessageFormat
类。如果是这样,那么你需要逃避撇号字符,因为它是单引号字符。单引号字符用于引用不是要解释的文本。
在String中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串"' {0}'"表示字符串" {0}",而不是FormatElement。单引号本身必须由整个字符串中的加倍的单引号' 表示。
(强调我的)
尝试
log.log( Level.WARNING, "Can''t {0}", new Object[] { var } );
此代码:
MessageFormat mf = new MessageFormat("Can''t {0}");
System.out.println(mf.format(new Object[] {false}));
产生此输出:
Can't false
答案 1 :(得分:0)
{
和}
也可能存在问题。这就是the NetBeans IDE hint to use message formats in log messages escapes these characters。
除了
log.log(Level.WARNING, "Can''t {0}", new Object[] {var});
你可以尝试简单而且更容易阅读
log.log(Level.WARNING, "Can’t {0}", new Object[] {var});
或者只是拼出来开始:
log.log(Level.WARNING, "Cannot {0}", new Object[] {var});