문제

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

First:

boolean var = false;
log.log( Level.WARNING, "Cant {0}", new Object[] { var } );

output:

Cant false

Second:

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

output:

Can't {0}

Why does the inclusion of an apostrophe ( ' ) causes the logger not to expand the token?

도움이 되었습니까?

해결책

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

다른 팁

{ 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});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top