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 から取得できます。
この質問に答えるのは少し遅れていることを知っています、そしておそらくあなたはすでに解決策を見つけましたが、私が見つけた解決策を投稿しています(私はたくさんグーグルした後)ので、少し役立つかもしれません:
-Dlog4j.debug
を追加しますこれが役立つことを願っています。
rgds
既に述べたように、log4j.propertiesはクラスパスに含まれるディレクトリにある必要があります。Maven化されたプロジェクトでは、src/main/resources/log4j.properties
になります。
VM引数で構成ファイルの場所を指定できます-Dlog4j.configuration = "file:/ C:/workspace3/local/log4j.properties"
実行コンテキストに対応するルートディレクトリに配置する必要があります。
例:
MyProject
src
MyClass.Java
log4j.properties
別のプロジェクトから実行を開始する場合、実行を開始するために使用されるプロジェクト内でそのファイルを使用する必要があります。たとえば、別のプロジェクトがいくつかのJUnitテストを保持している場合、log4j.propertiesファイルも必要です。
Log4j.propertiesの代わりにlog4j.xmlを使用することをお勧めします。より多くのオプションがあり、IDEなどからサポートを受けられます...
Mavenベースのプロジェクトの場合、log4j.propertiesをsrc/main/resourcesに保持します。ほかにすることがない!
Src内にlog4j.propertiesを配置する場合、ステートメントを使用する必要はありません-
PropertyConfigurator.configure("log4j.properties");
プロパティファイルがクラスパスにあるため、自動的に取得されます。
試してください:
PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
ファイルはWEB-INF/classesディレクトリに配置する必要があります。このディレクトリ構造は、warファイル内にパッケージ化する必要があります。
私のIDEはNetBeansです。写真に示すようにlog4j.propertyファイルを置きます
Root
Web
WEB-INF
このプロパティファイルを使用するには、次のコードを記述する必要があります。
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ファイルを使用できます。
いくつかの技術的に正しい具体的な回答がすでに提供されていますが、一般的には、ランタイムクラスパスのどこにでも、つまりJVMがクラスを求めている場所であればどこでもかまいません。
これは、Eclipseの/ srcディレクトリーまたはデプロイ済みアプリのWEB-INF/classesディレクトリーである可能性がありますが、クラスパスの概念と、ファイルがその中に配置される理由を理解することが最善です。 「魔法の」ディレクトリとしてのクラス。
私は多くの時間を費やして、なぜ log4j.properties ファイルは見られません。
その後、両方のプロジェクトにのみ表示されていることに気付きました MyProject/target/classes / そして MyProject/src/main/resources フォルダー。
誰かに役立つことを願っています。
PS:プロジェクトはMavenベースでした。
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");
Intellijで標準のMavenプロジェクトをセットアップしている場合は、log4jプロパティファイルを次の場所に配置するだけです。
project/src/main/resources
これが正しい方法だとは思いませんが、私の問題は解決しました。 log4j.propertiesファイルを「プロジェクトフォルダー」/ configに配置し、PropertyConfigurator.configure( "config // log4j.properties")を使用します。
IDEで動作しますが、jarファイルを自分で実行するときは動作しません。自分でjarファイルを実行する場合、log4j.propertiesファイルをjarファイルがあるフォルダーにコピーするだけです。同じディレクトリにあるjarファイルとプロパティファイルが正常に実行される場合。
Log4j.propertiesをクラスパスに配置します。適切な場所を特定するのに役立つ2つのケースを次に示します。1。Webアプリケーションの場合、クラスパスは/ WEB-INF/classesです。
\WEB-INF
classes\
log4j.properties
メイン/ユニットテストからテストするには、クラスパスはソースディレクトリです
\Project\
src\
log4j.properties
実際、次のような標準のJavaプロジェクト構造でこの問題を経験しました。
\myproject
\src
\libs
\res\log4j.properties
Eclipseでは、resフォルダーをビルドパスに追加する必要がありますが、Intellijでは、リンクされたスクリーンショットが示すようにresフォルダーをresoucesとしてマークする必要があります: resフォルダーを右クリックしてリソースとしてマーク 。
プロジェクト構造でlog4j.propertiesをすでに定義している場合、Log4JクラスでPropertyConfigurator.configure("log4j.properties");
を指定する必要はありません。
Web Dynamic Projectの場合:-
Log4j.propertiesをWebContent-> WEB-INF-> log4j.propertiesに保存する必要があります
これがお役に立てば幸いです。
それを行うには多くの方法があります。
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.
スクリーンショットの後に続きます:
Way2:Java/mavenプロジェクトのプロパティファイルを使用する場合PropertyConfiguratorを使用します
プロジェクト内の任意の場所にプロパティファイルを配置し、正しいパスを指定します。たとえば:src/javaLog4jProperties/log4j.properties
静的{
PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");
}
Way3:Java/mavenプロジェクトでxmlを使用する場合DOMConfiguratorを使用します
プロジェクト内の任意の場所にプロパティファイルを配置し、正しいパスを指定します。たとえば:src/javaLog4jProperties/log4j.xml
静的{
DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");
}