14

これはこの他の質問に似ていますが、私はすでにlogging.properties実行可能jarに入れており、機能しません。

次のクラス(ReportGenerator)があります。

 Logger logger = Logger.getLogger(ReportGenerator.class.getName());
 logger.log(Level.INFO, "LOG THIS");  

Netbeansを使用しているので、logging.propertiesファイルをパスに配置しますsrc/main/resources。それは(とりわけ)これを持っています:

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = /my/folder/reports.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = OFF
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.mypackage.ReportGenerator.level = ALL

logging.propertiesjarはMavenを使用して生成されます。解凍すると、jarのメインフォルダーにあることがわかります。com私のクラスがあるフォルダと一緒に。

-com
  -mypackage
      -ReportGenerator
logging.properties
...other things

コンソールから実行する場合:

java - jar MyReportsJar.jar

コンソールからログが表示されます。で設定したファイルに記録したいlogging.properties.

私は何が間違っているのですか?java.util.logging.config.fileJVMパラメータを設定せずにそれを行うにはどうすればよいですか?

4

1 に答える 1

18

これに数日対処し、インターネット上の多くのリソースを読んだ後、私はこの解決策を思いつきました:

プログラムでLogManagerのログプロパティを変更する必要があります。次のようlogging.propertiesにパッケージ化されたファイルを使用できます。.jar

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));

そして、前と同じようにロガーとログを取得できます。

 Logger logger = Logger.getLogger(ReportGenerator.class.getName());
 logger.log(Level.INFO, "LOG THIS"); 

しかし、実行時に別のファイルを指定できると非常に便利であることがわかっlogging.propertiesたので、最終的なコードは次のようになります。

        String logFile = System.getProperty("java.util.logging.config.file");
        if(logFile == null){
            LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));
        }                
        Logger logger = Logger.getLogger(ReportGenerator.class.getName());
        logger.log(Level.INFO, "LOG THIS"); 

そうすれば、jarを次のように実行すると次のようになります。

java -jar MyReportsJar.jar

内部logging.propertiesファイルを使用します。

しかし、私が実行した場合:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar

外部logging.propertiesファイルを使用します。

于 2013-02-18T20:35:07.013 に答える