7

RailsアプリケーションのログをLog4jで取得するために、3時間の大半を費やしました。ようやく機能するようになりましたが、自分がしたことが正しいかどうかはわかりません。最後の試みまで、さまざまな方法を試しましたが、役に立ちませんでした。だから私は本当にここでいくつかの検証を探しています.おそらくいくつかのポインタとヒントも同様です-正直に言って何でもありがたいです. 以下の 3 つの試みに、すべての私の弱い方法をまとめました。それぞれの試行でどこが間違っていたのかについての啓蒙を期待しています-たとえそれが私が引き裂かれることを意味するとしても.

事前に助けてくれてありがとう!

システム仕様

  • レール3.0
  • Windows Server 2008
  • Log4j 1.2
  • トマクト 6.0.29
  • Java 6

試行 1 - Log4J を使用するように Tomcat を構成

私は基本的に Apache Tomcat のウェブサイトhereのガイドに従いました。手順は次のとおりです。

  1. log4j.propertiesでファイルを作成します。$CATALINA_HOME/lib
  2. をダウンロードしてコピーしlog4j-x.y.z.jarます$CATALINA_HOME/lib
  3. Apache Tomcat Extras フォルダーの に$CATALINA_HOME/bin/tomcat-juli.jar置き換えますtomcat-juli.jar
  4. tomcat-juli-adapters.jarApache Tomcat Extras フォルダーからコピーします。$CATALINA_HOME/lib
  5. 消去$CATALINA_BASE/conf/logging.properties
  6. 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) を使用する

  1. 以前のセットアップからのすべての変更を元に戻しました
  2. $CATALINA_BASE/conf/logging.properties次のようにして変更しました。

    1. handlers私のアプリケーションの設定を次の行に追加します。5rails3.org.apache.juli.FileHandler
    2. ハンドラ固有のプロパティを追加する

      5rails3.org.apache.juli.FileHandler.level = FINE
      5rails3.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
      5rails3.org.apache.juli.FileHandler.prefix = rails3.
      
    3. 施設固有のプロパティの追加

      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
      
  3. jruby-rack README の Logging セクションに従って、次のコンテキスト パラメータを追加して、 myweb.xmlを変更しました (それに応じて warbler.rb も変更しましたが、web.xmlテストを高速化するために を直接変更することにしました)。

    <context-param>
      <param-name>jruby.rack.logging</param-name>
      <param-value>commons_logging</param-value>
    </context-param>
    
  4. Tomcatを再起動しました

結果

  • ログ ファイルが作成されましたが ( rails3.log)、ファイルにログ情報がありませんでした。

試行 2A - 既存のセットアップで Log4j を使用する

web.xml私は、この新しい設定で Log4j をもう一度試してみることにしました。

  1. log4j.jarを自分のWEB-INF/libフォルダにコピーしました
  2. ファイルを作成し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
    
  3. Tomcatを再起動しました

結果

試行 2 と同じ

注:log4j.logger.javax.servlet=DEBUG jruby-rack README で、すべてのログ出力が自動的にメソッドにリダイレクトされることを読んだので、使用しましたjavax.servlet.ServletContext#log。だから、これで撮れると思ったのですが、明らかに間違っていました。

質問

  1. なぜこれがうまくいかなかったのですか?
  2. Log4J はcommons_loggingAPI を使用していませんか?

試行 3 - slf4j を試してみました (WORKED)

なぜ Attempt 2A が機能しなかったのか、少し不確かですが、おそらく API を使用していないcommons_loggingため、jruby.rack.loggingパラメーターに使用できないのではないかと思いましcommons_loggingた... (しかし、まだ確信が持てませんでした)。slf4jオプションで見ました。聞いたことがなく、好奇心から調べてみることにしました。それについて簡単に読んだ後、私はそれが他のショットと同じくらい良いと思い、ここの指示に従って試してみることにしました.

試行 2A のセットアップから続けます。

  1. コピーslf4j-api-1.6.1.jarslf4j-simple-1.6.1.jarて自分のWEB-INF/libフォルダに
  2. フォルダにもコピーslf4j-log4j12-1.6.1.jarしましたWEB-INF/lib
  3. Tomcatを再起動しました

そしてヴィオラこれで、 rails3.logファイルにログ情報が記録されました。

したがって、大きな問題は次のとおりです。

なんてこと?

ロギングは機能しているように見えますが、私が行ったことが正しいかどうかは本当にわかりません。前に言ったように、私は多かれ少なかれ何らかの検証を実際に探しています。ポインタ/ヒント/アドバイスがあればよろしくお願いします。ありがとう!

4

2 に答える 2

2

私たちもいろいろ実験して、最終的にslf4jオプションに落ち着きました。私たちは Java のバックグラウンドから slf4j を知っていたので、それ以上のことはしませんでした。

<context-param>
   <param-name>jruby.rack.logging</param-name>
   <param-value>slf4j</param-value>
 </context-param>

ところで、slf4j-log4jxxx.jar を使用する場合、slf4j-simple-1.6.1.jar を tomcat/lib または WEB-INF/lib にコピーする必要はありません。

于 2011-01-22T00:20:58.883 に答える
0

commons-logging を使用した初期のテストでは、bufferSize が原因でゼロ バイトのファイルが表示された可能性があります。

Tomcat を停止したときにエントリがファイルにフラッシュされる場合は、これが事実であり、デフォルトの 8Kb バッファに違反しています。

無効にするには、すぐにフラッシュしてみてください...

org.apache.juli.FileHandler.bufferSize = -1

特定のハンドラーで...

したがって、ローカルホストの場合...

2localhost.org.apache.juli.FileHandler.bufferSize = -1

于 2013-07-04T13:45:48.333 に答える