Java logger - apostrophe issues with tokens

后端 未结 2 1524
时光说笑
时光说笑 2021-01-14 02:36

I have some unexplained behavior with java.util.logging. Let\'s take a look at these two samples:

First:

boolean var = false;
log.log( Lev         


        
相关标签:
2条回答
  • 2021-01-14 03:08

    { and } are also potentially problems. This is why the NetBeans IDE hint to use message formats in log messages escapes these characters.

    Besides

    log.log(Level.WARNING, "Can''t {0}", new Object[] {var});
    

    you can try simply and more readably

    log.log(Level.WARNING, "Can’t {0}", new Object[] {var});
    

    or just spell it out to begin with:

    log.log(Level.WARNING, "Cannot {0}", new Object[] {var});
    
    0 讨论(0)
  • 2021-01-14 03:11

    It appears that whatever logging mechanism you're using is using the MessageFormat class internally. If so, then you'll need to escape the apostrophe character, because it's a single-quote character. Single-quote characters are used to quote text that isn't meant to be interpreted.

    MessageFormat javadocs:

    Within a String, a pair of single quotes can be used to quote any arbitrary characters except single quotes. For example, pattern string "'{0}'" represents string "{0}", not a FormatElement. A single quote itself must be represented by doubled single quotes '' throughout a String.

    (emphasis mine)

    Try

    log.log( Level.WARNING, "Can''t {0}", new Object[] { var } );
    

    This code:

    MessageFormat mf = new MessageFormat("Can''t {0}");
    System.out.println(mf.format(new Object[] {false}));
    

    yields this output:

    Can't false
    
    0 讨论(0)
提交回复
热议问题