⇧ Oh, my gosh...
Apache Tomcatのthrew load() exceptionが分かり辛い
Eclipse内蔵のTomcatでMavenプロジェクトを動的Webプロジェクトにしたものを起動させてたんだけど、開発した機能が追加されたせいか、ログインページにアクセスしたら、
threw load() exception
⇧ ってなエラーがEclipseのコンソールに出ますと。
ちなみに、
⇧ Tomcatの設定ファイルには、
standardContext.loadOnStartup.loadException=Servlet [{1}] in web application [{0}] threw load() exception
⇧ と設定されており、何かしら、Java側でエラーが起きているってことのような雰囲気は分かるのだけど、これだけじゃ、該当箇所が分からんのよね...
ネットの情報だと、
⇧ デプロイメントアセンブリの設定が問題って仰ってる人がおるのだけど、今回は、該当しませんでした。
で、肝心のエラーの原因についてのログが吐き出されないので調査のしようがありませんと。
[可変情報]
{0}:サーブレット名
[意味]
[システムの処理]
サーブレットのロード/初期化を中断します。
[ユーザの対処]
あわせて出力されている他のメッセージおよび例外情報を参照し原因を取り除いてください。
⇧ とあるのだけど、いま手掛けてるシステムが肝心な部分のログについて出力しない作りになってるのか、例外情報などが参照できませんと...
結局のところ、別メンバーが実装の不具合を改修したことで解消されたので、Javaないしは、JSPに問題があったとは思うのだけど、ログは出力するようにしておいて欲しいかな...
⇧ ログの設定とかはしてるんだけど、threw load() exceptionが起こった後に、ログファイルに何も書き込まれてなかったんよね...
⇧ 上記サイト様を参考に、設定を見直してみますかね。
workspace/.metadata.plugins\org.eclipse.wst.server.core\tmp0\logs
⇧ の方は確かに確認しとらんかった。
ただ、自宅の環境で調べた感じでは、
⇧ localhost_access.logしか作成されとらんのだけど...
そもそも、Tomcatのログファイルの種類の全量が分からん...
Tomcatでログを設定する場所は3段階ほどあります。
⇧ 公式のTomcatの設定を見た感じでは、
1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90 1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8 2localhost.org.apache.juli.AsyncFileHandler.level = FINE 2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90 2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8 3manager.org.apache.juli.AsyncFileHandler.level = FINE 3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 3manager.org.apache.juli.AsyncFileHandler.maxDays = 90 3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8 4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. 4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90 4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
⇧ ってな感じで、4種類ほどログファイルがあるってことなんかなと思ったのですが、
ti-tomo-knowledge.hatenablog.com
⇧ 上記サイト様によりますと、
ログファイル名 | 内容 |
---|---|
catalina.out | コンソール出力と同じ(標準出力/標準エラー出力) 設定箇所: catalina.sh |
catalina.yyyy-MM-dd.log | Tomcatのログ 設定箇所: logging.properties |
localhost_access_log.yyyy-MM-dd.txt | アクセスログ 設定箇所: server.xml |
localhost.yyyy-MM-dd.log | ウェブアプリケーションのログ(ServletContext.log) 設定箇所: logging.properties |
host-manager.yyyy-MM-dd.log | host-managerのログ 設定箇所: logging.properties |
manager.yyyy-MM-dd.log | managerのログ 設定箇所: logging.properties |
全部で6種類ある模様。
とりあえず、catalina.outを見れば、Tomcatで稼働しているアプリケーションで起きている不具合についての詳細なエラー情報が確認できるんですかね?
Eclipse内蔵のTomcatで、catalina.outが出力されるのは、
ちなみに、catalina.out の場所は workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs となる(Eclipse 3.3.2 Preiades All in One の場合)。
Trasis Lab » tomcat セッション(PersistentManager, StandardSession)のデバッグ
⇧ のようなのですが、私の環境では、
⇧ tmp0、tmp1、tmp2のいずれのlogsフォルダにもcatalina.outは存在しませんでした...
Eclipse内蔵のTomcatのlogging.properties見てみたけど、デフォルトでcatalina.out用の設定されてるように見えるんだけどな...
う~む、分からん...
ちなみに、Windows環境に配置したTomcatを稼働してる場合については、
⇧ Tomcat\conf\logging.propertiesを確認すればとありますが、
Tomcatでログを設定する場所は3段階ほどあります。
⇧ のあたりも確認したほうが良い気はしますかね、設定ファイルの優先順位ってどうなってるのかな?
JULI is enabled by default, and supports per classloader configuration, in addition to the regular global java.util.logging configuration. This means that logging can be configured at the following layers:
- Globally. That is usually done in the
${catalina.base}/conf/logging.properties
file. The file is specified by thejava.util.logging.config.file
System property which is set by the startup scripts. If it is not readable or is not configured, the default is to use the${java.home}/lib/logging.properties
file in the JRE. - In the web application. The file will be
WEB-INF/classes/logging.properties
⇧ 説明から推測するに、優先順位的には、
- ${catalina.base}/conf/logging.properties
- WEB-INF/classes/logging.properties
- ${java.home}/lib/logging.properties
ってことになるんかな?
⇧ 配置場所が、${java.home}/lib/logging.properties じゃない気がするんだが...ネットの情報だと、JAVA_HOMEってJDKのフォルダを指定してること多いし...
毎度モヤモヤ感が半端ない...
今回はこのへんで。