web-dev-qa-db-ja.com

log4j.propertiesファイルはどこに置くべきですか?

Glassfish v2.1でnetbeans 6.7.1を使用してWebサービスプロジェクトを作成し、log4j.propertiesをプロジェクトのルートディレクトリに配置して使用します。

static Logger logger = Logger.getLogger(MyClass.class);

コンストラクター内:

PropertyConfigurator.configure("log4j.properties");

および関数内:

logger.info("...");
logger.error("...");
// ...

しかし、それはエラー情報です(実際には、私が理解できるほぼすべてのディレクトリに入れようとしました):

log4j:ERROR Could not read configuration file [log4j.properties].
Java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at Java.io.FileInputStream.open(Native Method)
        at Java.io.FileInputStream.<init>(FileInputStream.Java:106)
        at Java.io.FileInputStream.<init>(FileInputStream.Java:66)
        at org.Apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.Java:297)
        at org.Apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.Java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.Java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

サンプルプロジェクトは http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8 から取得できます。

125
mono

この質問に答えるのは少し遅れていることを知っています、そしておそらくあなたはすでに解決策を見つけましたが、私が見つけた解決策を投稿しています(私はたくさんグーグルした後)ので、少し役立つかもしれません:

  1. このスレッドで前述したように、log4j.propertiesをプロジェクトのWEB-INF\classesの下に配置します。
  2. Log4j-xx.jarをWEB-INF\libの下に配置します
  3. Log4jがロードされたかどうかをテストします。TomcatのJavaオプションの末尾に-Dlog4j.debugを追加します

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

rgds

111
miss

既に述べたように、log4j.propertiesはクラスパスに含まれるディレクトリにある必要があります。Maven化されたプロジェクトでは、src/main/resources/log4j.propertiesになります。

41
stivlo

VM引数で構成ファイルの場所を指定できます-Dlog4j.configuration = "file:/ C:/workspace3/local/log4j.properties"

26
Makatun

実行コンテキストに対応するルートディレクトリに配置する必要があります。

例:

    MyProject
       src
           MyClass.Java
           log4j.properties

別のプロジェクトから実行を開始する場合、実行を開始するために使用されるプロジェクト内でそのファイルを使用する必要があります。たとえば、別のプロジェクトがいくつかのJUnitテストを保持している場合、log4j.propertiesファイルも必要です。


Log4j.propertiesの代わりにlog4j.xmlを使用することをお勧めします。より多くのオプションがあり、IDEなどからサポートを受けられます...

25
KLE

Mavenベースのプロジェクトの場合、log4j.propertiesをsrc/main/resourcesに保持します。ほかにすることがない!

16
Byorn

Src内にlog4j.propertiesを配置する場合、ステートメントを使用する必要はありません-

PropertyConfigurator.configure("log4j.properties");

プロパティファイルがクラスパスにあるため、自動的に取得されます。

14
Ani

試してください:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
10
Jhon M

ファイルはWEB-INF/classesディレクトリに配置する必要があります。このディレクトリ構造は、warファイル内にパッケージ化する必要があります。

9
Martin OConnor

私のIDEはNetBeansです。写真に示すようにlog4j.propertyファイルを置きます

Root

project's root folder

Web

web folder

WEB-INF

WEB-INF folder

このプロパティファイルを使用するには、次のコードを記述する必要があります。

package example;

import Java.io.File;
import org.Apache.log4j.PropertyConfigurator;
import org.Apache.log4j.Logger;
import javax.servlet.*;
public class test {

public static ServletContext context;
static Logger log = Logger.getLogger("example/test");

public test() {

        String homeDir = context.getRealPath("/");
        File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
        log.info("This is a test");
    }
}

定義できます 静的なServletContextコンテキスト 別のJSPファイルから。例:

test.context = getServletContext(); 
test sample = new test(); 

これで、プロジェクトでlog4j.propertyファイルを使用できます。

7
Ali Mamedov

いくつかの技術的に正しい具体的な回答がすでに提供されていますが、一般的には、ランタイムクラスパスのどこにでも、つまりJVMがクラスを求めている場所であればどこでもかまいません。

これは、Eclipseの/ srcディレクトリーまたはデプロイ済みアプリのWEB-INF/classesディレクトリーである可能性がありますが、クラスパスの概念と、ファイルがその中に配置される理由を理解することが最善です。 「魔法の」ディレクトリとしてのクラス。

5
Brian

私は多くの時間を費やして、なぜ log4j.properties ファイルは見られません。
その後、両方のプロジェクトにのみ表示されていることに気付きました MyProject/target/classes / そして MyProject/src/main/resources フォルダー。
誰かに役立つことを願っています。
PS:プロジェクトはMavenベースでした。

5
RedCH

Glassfishはデフォルトで[Glassfishインストール場所]\glassfish\domains [ドメイン] \をデフォルトの作業ディレクトリとして検索していることがわかりました...この場所にlog4j.propertiesファイルをドロップし、PropertyConfiguratorを使用してコードで初期化できます前述のように...

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");
3
Durandal00

Intellijで標準のMavenプロジェクトをセットアップしている場合は、log4jプロパティファイルを次の場所に配置するだけです。

project/src/main/resources

IntelliJ-log4jプロパティの場所

1
Robert Squire

これが正しい方法だとは思いませんが、私の問題は解決しました。 log4j.propertiesファイルを「プロジェクトフォルダー」/ configに配置し、PropertyConfigurator.configure( "config // log4j.properties")を使用します。

IDEで動作しますが、jarファイルを自分で実行するときは動作しません。自分でjarファイルを実行する場合、log4j.propertiesファイルをjarファイルがあるフォルダーにコピーするだけです。同じディレクトリにあるjarファイルとプロパティファイルが正常に実行される場合。

1

Log4j.propertiesをクラスパスに配置します。適切な場所を特定するのに役立つ2つのケースを次に示します。1。Webアプリケーションの場合、クラスパスは/ WEB-INF/classesです。

\WEB-INF      
    classes\
        log4j.properties
  1. メイン/ユニットテストからテストするには、クラスパスはソースディレクトリです

    \Project\
       src\
          log4j.properties
    
1
Sharif

実際、次のような標準のJavaプロジェクト構造でこの問題を経験しました。

\myproject
    \src
    \libs
    \res\log4j.properties

Eclipseでは、resフォルダーをビルドパスに追加する必要がありますが、Intellijでは、リンクされたスクリーンショットが示すようにresフォルダーをresoucesとしてマークする必要があります: resフォルダーを右クリックしてリソースとしてマーク

0
Miracle Chan

プロジェクト構造でlog4j.propertiesをすでに定義している場合、Log4JクラスでPropertyConfigurator.configure("log4j.properties");を指定する必要はありません。

Web Dynamic Projectの場合:-

Log4j.propertiesをWebContent-> WEB-INF-> log4j.propertiesに保存する必要があります

これがお役に立てば幸いです。

0
Manish Patel

それを行うには多くの方法があります。

Way1:PropertyConfiguratorを使用せずにmavenプロジェクトで試行している場合

最初:scr/mainでリソースディレクトリを確認します

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

スクリーンショットの後に続きます:

![enter image description here

Way2:Java/mavenプロジェクトのプロパティファイルを使用する場合PropertyConfiguratorを使用します

プロジェクト内の任意の場所にプロパティファイルを配置し、正しいパスを指定します。たとえば:src/javaLog4jProperties/log4j.properties

静的{

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

enter image description here

Way3:Java/mavenプロジェクトでxmlを使用する場合DOMConfiguratorを使用します

プロジェクト内の任意の場所にプロパティファイルを配置し、正しいパスを指定します。たとえば:src/javaLog4jProperties/log4j.xml

静的{

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

enter image description here

0