catalina.outとcatalina.logの違いと用途

4004 ワード

catalina.out
catalina.outは実はtomcatの標準出力(stdout)と標準エラー(stderr)で、これはtomcatの起動スクリプトで指定されており、修正がなければstdoutとstderrはここにリダイレクトされます.だから私たちはアプリケーションでSystem.outを使って印刷したものがここに来ます.また,アプリケーションで他のログフレームワークを用いてConsoleへの出力を構成した場合もここに現れる.たとえばlogbackを例にとると、ch.qos.logback.core.consoleAppenderを構成するとcatalina.outに出力されます.
cataliana.{yyyyy-MM-dd}.logとlocalhost.{yyyy-MM-dd}.log
両方のログはlogging.propertiesで構成されています(デフォルトでは、起動スクリプトにjava.util.logging.config.fileとjava.util.logging.managerの2つの変数が指定されています).典型的なlogging.propertiesは次のようになります.
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

このファイルの大まかな意味は、rootがcatalinaとconsoleに出力されることです.ここのcatalinaは構成に応じてcatalina.{yyyy-MM-dd}.logであり、ここのconsoleは最終的にcatalina.outに出力される.これがcatalina.{yyyy-MM-dd}.logとcatalina.outのログの多くが同じ理由です.
プロファイルにはもう1つのlocalhostがあり、すべてのlognameまたはparent lognameがorg.apache.catalina.containerBase.[Catalina].[localhost]のものがlocalhost.{yyyyy-MM-dd}.logファイルに出力されます.このlognameは何を表していますか?tomcatにはserver.xmlのプロファイルがあります.このクリップがあります.

  
  


1つのTomcatプロセスは1つのEngineに対応し、1つのEngineの下に複数のHost(Virtual Host)があり、1つのHostには複数のContextがあり、例えば、ROOTの下にアプリケーションを配置するか、webappsの他のディレクトリにアプリケーションを配置するか、これがContextであることを簡単に理解できます.
このうちEngineはtomcatのStandardEngineクラス、HostはStandardHostクラス、ContextはStandardContextに対応しています.これらのクラスはContainerBaseから派生しています.これらのクラスで行われているアプリケーションコードに関連するログの中にはContainerBaseのgetLoggerが使用されていますが、このloggerのlogger nameはorg.apache.catalina.core.containerBase.[current container name].[current container name].[current container name]...
私たちのwebappのlistener、filter、servletの初期化はStandardContextで行われています.例えば、ROOTのlistenerの初期化に異常があり、印刷ログではlogger nameはorg.apache.catalina.core.containerBase.[Catalina].[localhost].[/b]です.このうちCatalinaとlocalhostは上のxmlセグメントのEngineとHostのnameであり、[/]ROOT対応のStandardContextのnameである.だからlistener,filter,servlet初期化時のログはlocalhost.{yyyy-MM-dd}.logというログを見る必要があります.たとえばSpringを使用すると、Springの初期化はSpringが提供するlistenerを使用して行われることが多いが、Springの初期化にbeanの初期化に失敗したため、アプリケーション全体が起動しなかった場合、cataina.outではなくlocalhostに出力される異常ログがある.だから、アプリケーションが起動できない場合があります.catalina.outログを探しますが、最後に根本的な原因が何なのかを特定していません.私たちが探しているログが間違っているからです.しかし、catalina.outには私たちが望んでいるログもあります.それは、私たちのアプリケーションや使用しているコンポーネントが自分で異常をキャプチャして印刷したためです.このとき、これらのログがconsoleに出力されるように構成されていると、catalina.outにも表示されます.
まとめ
まとめると、catalina.out、すなわち標準出力と標準エラーは、tomcatが自分の出力を実行するログと、アプリケーションからconsoleに出力されるログを含むcatalina.outに出力されます.catalina.{yyyyy-MM-dd}.logはtomcat自身が実行するログの一部であり、これらのログはcatalina.outにも出力されるが、consoleに出力されるログはcatalina.{yyyyy-MM-dd}.logには出力されない.localhost.{yyyy-MM-dd}.logは主にアプリケーション初期化(listener,filter,servlet)未処理の例外がtomcatによって最後にキャプチャされて出力されるログであり、これらの未処理の例外は最終的にアプリケーションが起動できない.
最後に、ここでいくつかのログファイルを分けるのは問題の検索に不利ですが、なぜcatalina.outに出力しないのでしょうか.tomcatは汎用コンテナ自体として、Engineの下に複数のHostがあることを考慮して、各Hostのログはやはり異なるファイルに出力されると思います.実際には単容器,単Host,さらにはROOTのContextが1つしかないことが多い.
一般的にlog 4 jで業務によって区分され、いくつかの重要な業務に対して単独で1つのファイルに打たれ、問題を位置決めしやすく、他のデフォルトはcatalinaに打たれます.