Java logger - 撇号与令牌有关

时间:2014-03-26 18:58:39

标签: java logging

好的,两个样本摘录:

首先:

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}

为什么包含撇号(')会导致记录器不扩展令牌?

2 个答案:

答案 0 :(得分:4)

看来您使用的任何日志记录机制都在内部使用MessageFormat类。如果是这样,那么你需要逃避撇号字符,因为它是单引号字符。单引号字符用于引用不是要解释的文本。

MessageFormat javadocs

  

在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});