2017-10-17 13 views
0

私はパッケージ内にいくつかのクラスを持ち、プロジェクト内にはいくつかのパッケージを持っています。親クラス内で継承されているこれらのファイルについては、 はどのくらいの頻度でlog4j2の設定ファイルを設定する必要がありますか?

{ // File location for log4j2.xml 
    System.setProperty("log4j.configurationFile", 
     "file:\\\\" + System.getProperty("user.dir") + "\\Properties\\log4j2.xml"); 
} 

そして、まだある、私はそうERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.

を参照して、明らかに、一度十分ではありません。

したがって、システムプロパティーを設定する必要がある一般的なルールは何ですか。log4j.configurationFile

  • 1パッケージにつき1回ですか?
  • クラスごとに1回ですか?
  • パッケージに関係なく、各親/基本クラスはありますか?
  • 他に何かありますか?

複数のクラスとパッケージのベストプラクティスは何ですか?

答えて

3

Log4j 2は、LoggerインスタンスがJVMインスタンス内で最初に作成されると、Loggerインスタンスを宣言するアプリケーションの最初のクラスがLog4j 2を初期化します。だから、この質問への答え...

どのくらいの頻度でlog4j2の設定ファイルを設定する必要がありますか?

... です。

あなたのOP:No log4j2 configuration file found. Using default configurationで報告された問題は、Log4jが指定しようとした設定ファイルを見つけることができないことが原因です。この問題はではなく、であり、設定ファイルを十分に設定していないことが原因です。次のように

the docsによるとLog4jには、その構成ソースを探します:

  1. Log4jには、「log4j.configurationFile」システムのプロパティを検査し、、設定されている場合、 を使用して設定をロードしようとしますファイル拡張子と一致するConfigurationFactory。
  2. システムプロパティが設定されていない場合、プロパティConfigurationFactoryはクラスパス内のlog4j2-test.propertiesを検索します。
  3. このようなファイルが見つからない場合、YAML ConfigurationFactoryはクラスパスにlog4j2-test.yamlまたはlog4j2-test.ymlを探します。
  4. このようなファイルが見つからない場合、JSON ConfigurationFactoryはクラスパスにlog4j2-test.jsonまたはlog4j2-test.jsnを探します。
  5. このようなファイルが見つからない場合、XML ConfigurationFactoryはクラスパス内のlog4j2-test.xmlを探します。
  6. テストファイルが見つからない場合、プロパティConfigurationFactoryはクラスパス上のlog4j2.propertiesを検索します。
  7. プロパティファイルが見つからない場合、YAML ConfigurationFactoryは クラスパス上のlog4j2.yamlまたはlog4j2.ymlを探します。
  8. YAMLファイルを見つけることができない場合、JSON ConfigurationFactoryはクラスパス上でlog4j2.jsonまたはlog4j2.jsnを探します。
  9. JSONファイルを見つけることができない場合、XML ConfigurationFactoryはclasspathにlog4j2.xmlを配置しようとします。
  10. 設定ファイルが見つからない場合、DefaultConfigurationが使用されます。これによりログ出力がコンソールに出力されます。

log4j.configurationFileを設定するには、あなたの試みが成功した場合は、オプション1が従事されるだろうが、その試みは成功していないあなたが引用エラーメッセージがLog4jのオプション10に至るまで低下していることを教えてくれるので、我々はこれを知っています。

-Dlog4j.configurationFile =/path/to/log4j2.xmlでアプリケーションを実行するか、log4j2.xmlがアプリケーションのクラスパス上にあることを確認することをお勧めします。 System.setProperty(...)コールでコードを捨てるという考えは、反パターンのように感じて、より前にSystem.setProperty(...)を呼び出すと、設定ファイルの場所を知る前にLog4jが初期化されるため、非常に脆いでしょう。

関連する問題