※当サイトの記事には、広告・プロモーションが含まれます。

Apache Tomcatのthrew load() exceptionが分かり辛い

www.ipa.go.jp

⇧ Oh, my gosh...

Apache Tomcatのthrew load() exceptionが分かり辛い

Eclipse内蔵のTomcatMavenプロジェクトを動的Webプロジェクトにしたものを起動させてたんだけど、開発した機能が追加されたせいか、ログインページにアクセスしたら、

threw load() exception    

⇧ ってなエラーがEclipseのコンソールに出ますと。

ちなみに、

github.com

Tomcatの設定ファイルには、

standardContext.loadOnStartup.loadException=Servlet [{1}] in web application [{0}] threw load() exception    

⇧ と設定されており、何かしら、Java側でエラーが起きているってことのような雰囲気は分かるのだけど、これだけじゃ、該当箇所が分からんのよね...

ネットの情報だと、

stackoverflow.com

⇧ デプロイメントアセンブリの設定が問題って仰ってる人がおるのだけど、今回は、該当しませんでした。

で、肝心のエラーの原因についてのログが吐き出されないので調査のしようがありませんと。

software.fujitsu.com

SEVERE: Servlet {0} threw load() exception

 

[可変情報]

[意味]

サーブレットのロード/初期化に失敗しました。このサーブレットは無効です。

[システムの処理]

サーブレットのロード/初期化を中断します。

[ユーザの対処]

あわせて出力されている他のメッセージおよび例外情報を参照し原因を取り除いてください。

11.75.10 Webコンテナの運用時に出力されるメッセージ

⇧ とあるのだけど、いま手掛けてるシステムが肝心な部分のログについて出力しない作りになってるのか、例外情報などが参照できませんと...

結局のところ、別メンバーが実装の不具合を改修したことで解消されたので、Javaないしは、JSPに問題があったとは思うのだけど、ログは出力するようにしておいて欲しいかな...

diaryruru.blog.fc2.com

⇧ ログの設定とかはしてるんだけど、threw load() exceptionが起こった後に、ログファイルに何も書き込まれてなかったんよね...

fumidzuki.com

qiita.com

⇧ 上記サイト様を参考に、設定を見直してみますかね。

workspace/.metadata.plugins\org.eclipse.wst.server.core\tmp0\logs

⇧ の方は確かに確認しとらんかった。

ただ、自宅の環境で調べた感じでは、

localhost_access.logしか作成されとらんのだけど...

そもそも、Tomcatのログファイルの種類の全量が分からん...

tomcat.apache.org

github.com

qiita.com

Tomcatでログを設定する場所は3段階ほどあります。

  1. JREの設定 ${JAVA_HOME}/lib/logging.properties
  2. Tomcatの設定 ${CATALINA_BASE}/conf/logging.properties
  3. アプリケーションの設定 WEB-INF/classes/logging.properties

TomcatとEclipseとログ - Qiita

⇧ 公式の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

szk302.dev

⇧ 上記サイト様によりますと、

ログファイル名 内容
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が出力されるのは、

trasis.jp

ちなみに、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を稼働してる場合については、

stackoverflow.com

Tomcat\conf\logging.propertiesを確認すればとありますが、

Tomcatでログを設定する場所は3段階ほどあります。

  1. JREの設定 ${JAVA_HOME}/lib/logging.properties
  2. Tomcatの設定 ${CATALINA_BASE}/conf/logging.properties
  3. アプリケーションの設定 WEB-INF/classes/logging.properties

TomcatとEclipseとログ - Qiita

⇧ のあたりも確認したほうが良い気はしますかね、設定ファイルの優先順位ってどうなってるのかな?

tomcat.apache.org

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 the java.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

https://tomcat.apache.org/tomcat-8.0-doc/logging.html

⇧ 説明から推測するに、優先順位的には、

  1. ${catalina.base}/conf/logging.properties
  2. WEB-INF/classes/logging.properties
  3. ${java.home}/lib/logging.properties

ってことになるんかな?

まぁ、Eclipse内蔵のJavaについては、

⇧ 配置場所が、${java.home}/lib/logging.properties じゃない気がするんだが...ネットの情報だと、JAVA_HOMEってJDKのフォルダを指定してること多いし...

毎度モヤモヤ感が半端ない...

今回はこのへんで。