2016-09-14 12 views
2

ビルドにmavenを使用するJavaプロジェクトがあります。 私のプロジェクトでjava.util.logging.Loggerを使用していて、logger.propertiesファイル(コマンドラインではありません)を使用して設定したいと考えています。Java Logger:logger.propertiesファイルのログレベルを設定できません

私はこのようなlogger.propertiesファイル作成:ここで

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
.level=WARNING 

java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 

java.util.logging.config.file="../../results/api.log" 

は私がいる問題です:

  1. java.util.logging.SimpleFormatter.formatを進めています。ここでフォーマットを変更すると、私のプロジェクトで変更がすぐにわかります。だから私は少なくとも私は正しくファイルをインポートしていることを知っている。
  2. .levelが機能していません。私はinfofinestwarningなどに変更しようとしましたが、私がそれを変更した後、私はINFOを表示しないように言ったとしても、すべてのINFOメッセージを表示します。
  3. java.util.logging.config.fileが機能しません。私は、これが相対的な経路であるため、動作しないと予想しています。誰でも私はどのようにプロパティファイル内の相対パス名を解決することができます知っている?結果を保存するためには、

    .level=WARNING 
    
    handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
    
    java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 
    

    その後

    logger.properties:


ソリューション

は、私はこのように、先頭に.levelを動かすのに必要な"api.log"に、私はコード内でこれを行いました:

RequestHelper.java

import org.apache.commons.io.FilenameUtils; 

public class RequestHelper { 

    private static final Logger LOGGER = Logger.getLogger(RequestHelper.class.getName()); 

    protected RequestHelper() { 
     //SET LOGGER TO OUTPUT TO "../../results/api.log" 
     //Logs will ALSO output to console. 
     String result_file = getNormalizedAbsolutePath("../../results/api.log"); 
     Handler fh = new FileHandler(result_file); 
     Logger.getLogger("").addHandler(fh); 
    } 

    public static String getNormalizedAbsolutePath(String fileName) { 
     String path; 
     File file = new File(fileName); 
     try { 
      path = file.getCanonicalPath(); 
     } catch (IOException e) { 
      LOGGER.warning("Error while computing the canonical path of file: " + fileName); 
      path = file.getAbsolutePath(); 
     } 
     return FilenameUtils.normalize(path); 
    } 
} 
+0

-Djava.util.logging.config.file = "logging.properties"を設定しましたか? –

答えて

2

ただの推測。ドキュメントから:

".level"で終わる名前のすべてのプロパティは、ロガーのログレベルを定義するものとみなされます。したがって、 "foo.level"は、 "foo"という名前のロガーのログレベルを定義し、名前階層の子にも(再帰的に)ログレベルを定義します。 ログレベルは、プロパティファイルで定義されている順序で適用されます。したがって、ツリー内の子ノードのレベル設定は、親の設定に従う必要があります。

いずれかのハンドラを定義する前に、最初に.levelを設定してみてください。ルートロガーレベルを最初に設定すると、後で定義するロガーはルートログレベルを継承します。また

プロパティ "コンフィグ"。このプロパティは、任意の構成コードを実行できるようにするためのものです。

java.util.logging.config.fileはシステムプロパティであり、設定ファイルでは機能しません。 "config"を使ってみてください。

+1

あなたはそれを持っています!私はちょうど "レベル"の行を上に移動する必要があった!今仕事している^ - ^ – Kayvar

関連する問題