4

これを読む前に、私が未知のJava領域のPython開発者であることを知っておく必要があります。

Javaのロギングを設定しようとしています。logging.propertiesを設定すると、動作させることができました。このような:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -jar start.jar

ファイルはlogging.propertiesリビジョン管理にチェックインされており、現在の設定ではすべての環境で使用されるため、logging.propertiesファイルにlogging.FileHandler.patternをハードコーディングする必要はありません。それで、私はこれを行うことによって、それをコマンドラインに移動しようとしました:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar

しかし、FileHandler.patternが認識されなかったため、ファイルに書き込まれなかったようです。それで、私は、logging.propertiesファイルを捨てて、コマンドラインにすべてを投げてみようと思いました。だから、私はこれを試しました:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.Handler=java.util.logging.FileHandler -D.level=WARNING -Djava.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar

しかし、それもうまくいきませんでした。だから、私は助けを求めています。

3つの質問:

  1. 私が提供した2番目の例がうまくいかなかったのはなぜですか?
  2. 私が提供した3番目の例がうまくいかなかったのはなぜですか?
  3. logging.propertiesファイルはバージョン管理にチェックインされており、共有ファイルであるため、これに対する正しいアプローチは何ですか?ベストプラクティスは何ですか?

返信するときは、Java初心者のために小さな言葉を使用してください。:-)

4

2 に答える 2

2

-Dxyz.blahbla.bla=foobarはシステム プロパティであり、すべてをシステム プロパティとして使用できるわけではありません。これは、そのプロパティを要求するコードがいくつかあり、必要なものを何でも配置できても、誰もそれを読み取らないためです。

たとえば、次のコードを試してください。

class HelloSystemProperty {
     public static void main( String ... args ) {
         System.out.println( System.getProperty("getIt"));
      }
 }

そして、次のように実行します。

java -DgetIt=Yeah HelloSystemProperty

したがって、ご想像のとおり、自分で読み取ってそれに応じて処理しない限り、そのファイルに入るすべてのものをシステム プロパティとして配置することはできません。

したがって、ログレベルをシステムプロパティとして手動で変更する必要がある場合は、そのプロパティを読み取って値を設定するコードを追加することをお勧めしますが、おそらくそれは多すぎて、そこに行きたいかどうかわかりません。

したがって、ファイルを使用するだけで十分です

これが役立つことを願っています。

于 2011-06-29T05:58:04.733 に答える
1

パターンには実行時に置き換えられるトークンを含めることができるため、「FileHandler パターンをハードコーディングする」ことはそれほど悪いことではないかもしれません。%t は、VM がシステムの一時ディレクトリ (/var/tmp や C:\\TEMP など) と見なすものに置き換えられ、%h はユーザーのホーム ディレクトリ (または "user.home" システム プロパティ) に置き換えられます。他にもいくつかありますが、すべてを知っているわけではありません。

それらのいくつかを使用する場合、パターンは十分に汎用的であるため、移植性のために超一般化しようとすることを心配する必要はありません。

于 2012-11-14T16:24:38.963 に答える