RailsアプリケーションのログをLog4jで取得するために、3時間の大半を費やしました。ようやく機能するようになりましたが、自分がしたことが正しいかどうかはわかりません。最後の試みまで、さまざまな方法を試しましたが、役に立ちませんでした。だから私は本当にここでいくつかの検証を探しています.おそらくいくつかのポインタとヒントも同様です-正直に言って何でもありがたいです. 以下の 3 つの試みに、すべての私の弱い方法をまとめました。それぞれの試行でどこが間違っていたのかについての啓蒙を期待しています-たとえそれが私が引き裂かれることを意味するとしても.
事前に助けてくれてありがとう!
システム仕様
- レール3.0
- Windows Server 2008
- Log4j 1.2
- トマクト 6.0.29
- Java 6
試行 1 - Log4J を使用するように Tomcat を構成
私は基本的に Apache Tomcat のウェブサイトhereのガイドに従いました。手順は次のとおりです。
log4j.propertiesでファイルを作成します。$CATALINA_HOME/lib- をダウンロードしてコピーし
log4j-x.y.z.jarます$CATALINA_HOME/lib - Apache Tomcat Extras フォルダーの に
$CATALINA_HOME/bin/tomcat-juli.jar置き換えますtomcat-juli.jar tomcat-juli-adapters.jarApache Tomcat Extras フォルダーからコピーします。$CATALINA_HOME/lib- 消去
$CATALINA_BASE/conf/logging.properties - Tomcat の起動 (サービスとして)
ガイドに従って期待される結果
フォルダーにtomcat.logファイルが表示されているはずです。$CATALINA_BASE/logs
実績
- tomcat.log がありません
- 代わりに3 つの標準ログを
見た
jakarta_service_20101231.logstderr_20101231.logstdout_20101231.log
質問
- 少なくともファイルを見たはずではありません
tomcat.logか?
試行 2 - デフォルトの Tomcat ロギング (commons-logging) を使用する
- 以前のセットアップからのすべての変更を元に戻しました
$CATALINA_BASE/conf/logging.properties次のようにして変更しました。handlers私のアプリケーションの設定を次の行に追加します。5rails3.org.apache.juli.FileHandlerハンドラ固有のプロパティを追加する
5rails3.org.apache.juli.FileHandler.level = FINE 5rails3.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 5rails3.org.apache.juli.FileHandler.prefix = rails3.施設固有のプロパティの追加
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rails3].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rails3].handlers = 4host-manager.org.apache.juli.FileHandler
jruby-rack README の Logging セクションに従って、次のコンテキスト パラメータを追加して、 my
web.xmlを変更しました (それに応じて warbler.rb も変更しましたが、web.xmlテストを高速化するために を直接変更することにしました)。<context-param> <param-name>jruby.rack.logging</param-name> <param-value>commons_logging</param-value> </context-param>Tomcatを再起動しました
結果
- ログ ファイルが作成されましたが (
rails3.log)、ファイルにログ情報がありませんでした。
試行 2A - 既存のセットアップで Log4j を使用する
web.xml私は、この新しい設定で Log4j をもう一度試してみることにしました。
log4j.jarを自分のWEB-INF/libフォルダにコピーしましたファイルを作成し
log4j.propertiesて入れましたWEB-INF/classeslog4j.rootLogger=INFO, R log4j.logger.javax.servlet=DEBUG log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.base}/logs/rails3.log log4j.appender.R.MaxFileSize=5036KB log4j.appender.R.MaxBackupIndex=4 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%nTomcatを再起動しました
結果
試行 2 と同じ
注:log4j.logger.javax.servlet=DEBUG jruby-rack README で、すべてのログ出力が自動的にメソッドにリダイレクトされることを読んだので、使用しましたjavax.servlet.ServletContext#log。だから、これで撮れると思ったのですが、明らかに間違っていました。
質問
- なぜこれがうまくいかなかったのですか?
- Log4J は
commons_loggingAPI を使用していませんか?
試行 3 - slf4j を試してみました (WORKED)
なぜ Attempt 2A が機能しなかったのか、少し不確かですが、おそらく API を使用していないcommons_loggingため、jruby.rack.loggingパラメーターに使用できないのではないかと思いましcommons_loggingた... (しかし、まだ確信が持てませんでした)。slf4jオプションで見ました。聞いたことがなく、好奇心から調べてみることにしました。それについて簡単に読んだ後、私はそれが他のショットと同じくらい良いと思い、ここの指示に従って試してみることにしました.
試行 2A のセットアップから続けます。
- コピー
slf4j-api-1.6.1.jarしslf4j-simple-1.6.1.jarて自分のWEB-INF/libフォルダに - フォルダにもコピー
slf4j-log4j12-1.6.1.jarしましたWEB-INF/lib - Tomcatを再起動しました
そしてヴィオラ!これで、 rails3.logファイルにログ情報が記録されました。
したがって、大きな問題は次のとおりです。
なんてこと?
ロギングは機能しているように見えますが、私が行ったことが正しいかどうかは本当にわかりません。前に言ったように、私は多かれ少なかれ何らかの検証を実際に探しています。ポインタ/ヒント/アドバイスがあればよろしくお願いします。ありがとう!