- ベストアンサー
Eclipse上でのTOMCATのエラー
- Java超初心者のため、EclipseでTOMCATを使う際に発生したエラーについての質問です。
- TOMCATを起動するとlog4jのエラーメッセージが表示され、日付表示などが表示されない状況です。
- 環境変数とクラスパスの設定に関連する問題がある可能性があり、CLASSPATH、LOG4J_HOME、JAVA_HOMEの値も記載しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クラスパスについて、少し混乱されているようなので簡単に説明させていただきます。 クラスパスとは、一言でいうと、jvmが実行時に読み込みを行うクラスが置いてあるパスです。 ただ、Webアプリケーションを開発されている場合、このクラスパスには2種類あると思ってください。 1.アプリケーションサーバ実行のためのクラスパス アプリケーションサーバ(Tomcat)は、それ自体がjavaプログラムですので、その実行に際して読み込むクラスをクラスパスから読み込みます。 この場合、環境変数CLASSPATHで定義されているクラスパスを読み込みます。 2.Webアプリケーションが読み込むクラスパス Tomcat上で動くWebアプリケーションも当然javaプログラムですので、実行時に読み込むクラスをクラスパスから読み込みます。 その際、1で読み込まれたクラスパスに加えて、各Webアプリケーションのルートディレクトリ($TOMCAT_HOME/webapps/test_appli/)の下の「WEB-INF/classes」以下を、アプリ固有のクラスパスとして動的にクラスパスへ追加して読み込むと思ってください。 (正確にはこれらに加えて、「1.5.Webコンテナが読み込むクラスパス」というのもあるのですが、それはまた別の機会に・・・) で、本件ですが、結論からいうと環境変数で設定されているCLASSPATH上に「log4j.properties」を配置しても問題なく動作するはずです。 ただ、各Webアプリケーションで使用されるクラスは各Webアプリケーションのクラスパス上に配置すべきです。(もし環境変数のほうのクラスパスに配置すると、全てのWebアプリケーションで共通のlog4j設定を使用することになり、好ましくありません。稼動しているサービスと開発/デバック中のサービスで同じログを吐くのはありえませんよね?) 「log4j.properties」配置するのは、log4jを使用したいWebアプリのルート($TOMCAT_HOME/webapps/test_appli/)以下の「WEB-INF/classes」以下です。Tomcatに複数アプリケーションがある場合は、面倒でもそれぞれに配置してください。 オーケーでしょうか?
その他の回答 (1)
- shiz
- ベストアンサー率36% (4/11)
エラーの内容は、「log4jを初期化しようとしてるんだけど、設定が正しくされていないので起動できない」というものです。 log4jをアプリで使用しないのであれば無視しても全く問題はないのですが、log4jを使いたいor気持ち悪いのであれば、log4jの設定を行ってあげる必要があります。 具体的には、log4j.propertiesという設定ファイルをclassパスの通っているディレクトリ(WEB-INF/classes 直下とか)に配置してあげればOKです。 その際、log4j.propertiesファイルの内容は、 ------ log4j.rootCategory=DEBUG, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout ------ などとすれば、とりあえずWARNINGは出力されなくなると思います。 log4j.propertiesファイルの詳しい記述方法、またlog4jの使い方については、参考URLのページが詳細で分かりやすいので参考になさってください。
お礼
わかりやすい回答ありがとうございました(^o^) エラーの意味もよくわからなかったので、そういうことなのかぁと納得しました。 しかし、ひとつわからないことが・・・ 設定ファイルをクラスパスの通っているディレクトリとあるのですが、 それはどこを指すのでしょうか。 環境変数CLASSPATHのルートの中にあるWEB-INFのことですか?? CドライブにはWEB-INF/classesというファイル(?)がたくさん あって配置すればよいかわかりませんでした>< もし、よろしければ教えていただけると助かります。 何度も申し訳ありません。。
お礼
補足に引き続いて、上記のエラーについてですが、 「log4j.properties」Webアプリのルート下のWEB-INF/classes下に配置したところ、エラーが消えました!! 本当にありがとうございました。 ほんとうにとても丁寧に答えてくださって、すごくわかりやすかったです。 まだまだ勉強中なので、これからもお世話になることがあるかもしれませんが、 そのときはどうぞよろしくお願いいたします。 ありがとうございましたo(^-^o)(o^-^)o
補足
ありがとうございましたm(_)m shizさんのおっしゃるとおり、クラスパスというのを誤って理解しておりました・・・ 今まで環境変数のCLASSPATH=クラスパスだと思い込んでいたところが あったのですが、厳密にはそうではないんですね。 勉強不足で申し訳ありません。 このことを理解したらやっと 「classパスの通っているディレクトリに配置する」ということが理解できました☆ ありがとうございました。