- - PR -
log4j設定ファイル log4j.xmlの設置場所
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-01 19:17
Tomcat、Strutsを使用してWebアプリを作成しています。 そこで、log4jを使用して、ログをとろうと考えています log4j設定ファイル log4j.xmlについてお聞きしたいのですが、 クラスから読み込むときに DOMConfigurator.configure("./log4j.xml"); と指定するとファイルが見つかりませんとエラーがでます エラーメッセージは log4j:ERROR Could not parse file [./log4j.xml]. java.io.FileNotFoundException: C:\Program Files\All-In-One Eclipse\.\log4j.xml (指定されたファイルが見つかりません。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:598) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711) at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:604) at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:733) at action.BunkatuTestAction.execute(BunkatuTestAction.java:22) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at encoding.EncodingFilter.doFilter(EncodingFilter.java:26) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) といった感じです。 エラーが起きているにもかかわらず、設定ファイルで指定した場所にlogは作成されていました。 ファイルの指定を絶対パスにした場合はエラー等はなしでそのままできました。 サーバにデプロイする場合絶対パスではまずいと思うのです 何か解決方法があれば教えてください | ||||||||
|
投稿日時: 2007-01-01 22:43
そもそも、ここにファイルは存在しているのでしょうか。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-01-02 18:18
"./log4j.xml"と指定されているようですが、log4j.xmlは実際どこにありますでしょうか。
例えばWebアプリの/WEB-INF/classes/直下にあるとすれば、log4j側で勝手に読み込んでくれる筈です。(LogManagerクラスのstaticブロックとか読めば、log4jが設定ファイルをどういった順番で探索するのか分かる・・・筈、です) ちなみにWebアプリのServlet内から、"."や".."を "Webアプリのカレントディレクトリ" みたいな意識で使うことはできないと思います。Webサーバあるいはそれを動かしているJavaVMにとっての"."や".."なので、Webサーバの設定ディレクトリや実行ディレクトリ、JavaVMのディレクトリになっていたような気が・・・あ、ですからAll-In-One Eclipseのディレクトリが出てきたわけですか。 ServletContext#getRealPath()などから、URLに対応する物理PATHを取り出せるはずですので、調べてみて下さい。 | ||||||||
|
投稿日時: 2007-02-25 20:32
返事が遅れました。申し訳ありません。
返答ありがとうございます アドバイス通りに アプリの/WEB-INF/classes/直下に置いて DOMConfigurator.configure("log4j.xml"); と記述しサーバにデプロイして実行してみたのですが、結果は log4j:ERROR Could not parse file [log4j.xml]. java.io.FileNotFoundException: C:\apache-tomcat-5.5.17\bin\log4j.xml (指定されたファイルが見つかりません。) C:\apache-tomcat-5.5.17\binにはファイルを置いていません 置いてある場所は C:/apache-tomcat-5.5.17/webapps/WEB-API/WEB-INF/classes にlog4j.xmlはおいてあります 何か設定が足りないのでしょうか? | ||||||||
|
投稿日時: 2007-02-25 21:12
DOMConfigurator.configure() の仕様を確認しましょう。
クラスパスからではなく、ファイルシステムから設定を読み込むメソッドなのではないでしょうか? なので Tomcat の起動ディレクトリからファイルを読み込もうとしているのだと思います。 | ||||||||
|
投稿日時: 2007-02-25 21:47
https://svn.apache.org/repos/asf/logging/log4j/trunk/
log4jのコードを見てみたら、DOMConfigurator.configure()の中身はこうなってました。
new File(filename)しているから、起動ディレクトリに置かないとダメっぽいですね。 それかServletContext#getRealPath()使うか、Thread.currentThread().getContextClassLoader().getResource()を使うとか。 #というか、trunkではDOMConfiguratorは@deprecatedだけど…。 _________________ 『Life's rich Tapestry!!』 [ メッセージ編集済み 編集者: こくぼ 編集日時 2007-02-25 21:50 ] | ||||||||
|
投稿日時: 2007-02-26 01:25
DOMConfigurator#configure(java.net.URL)
っていうメソッドもありますね。
もしくはDOMConfigurator#configure(String)の場合、
で大丈夫でしょう。 私の場合は設定ファイルが、クラスパス上に配置されているのなら、 前者を採用し、WEB-INF直下なら後者を採用します。 |
1