2017-01-17 5 views
1

java.util.logging.Logger.log(Level, String)メソッドでいくつかのパラメータをコンソールに出力しようとしています。しかし、パラメータは常にそのまま印刷されます:私は、NetBeansでこれを実行するとログメッセージに一重引用符で囲まれたパラメータがそのまま出力されます

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

、出力は次のとおりです。明らかに

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

この問題の理由は、java.text.MessageFormatbeing usedであるためです。 MessageFormatを引用する

String内では、単一引用符のペアは、単一引用符を除く任意の文字を引用するのに使用することができます。たとえば、パターン文字列"'{0}'"は、文字列"{0}"を表し、FormatElementではありません。単一引用符自体は、文字列全体に二重引用符「''」で表す必要があります。

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'. 

ので、回避策はこのことでしょう

関連する問題