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.jar
Apache Tomcat Extras フォルダーからコピーします。$CATALINA_HOME/lib
- 消去
$CATALINA_BASE/conf/logging.properties
- Tomcat の起動 (サービスとして)
ガイドに従って期待される結果
フォルダーにtomcat.log
ファイルが表示されているはずです。$CATALINA_BASE/logs
実績
- tomcat.log がありません
- 代わりに3 つの標準ログを
見た
jakarta_service_20101231.log
stderr_20101231.log
stdout_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/classes
log4j.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%n
Tomcatを再起動しました
結果
試行 2 と同じ
注:log4j.logger.javax.servlet=DEBUG
jruby-rack README で、すべてのログ出力が自動的にメソッドにリダイレクトされることを読んだので、使用しましたjavax.servlet.ServletContext#log
。だから、これで撮れると思ったのですが、明らかに間違っていました。
質問
- なぜこれがうまくいかなかったのですか?
- Log4J は
commons_logging
API を使用していませんか?
試行 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ファイルにログ情報が記録されました。
したがって、大きな問題は次のとおりです。
なんてこと?
ロギングは機能しているように見えますが、私が行ったことが正しいかどうかは本当にわかりません。前に言ったように、私は多かれ少なかれ何らかの検証を実際に探しています。ポインタ/ヒント/アドバイスがあればよろしくお願いします。ありがとう!