質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache log4j

Apache log4jは、Javaのログユーティリティです。Apache Software Foundationの元で開発されており、Apache Software Liense 2としてライセンスが与えられています。

Q&A

解決済

2回答

5706閲覧

Commons Loggingで標準エラー出力の内容を、ログファイルに出力する方法を教えてください。

yuji38kwmt

総合スコア437

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache log4j

Apache log4jは、Javaのログユーティリティです。Apache Software Foundationの元で開発されており、Apache Software Liense 2としてライセンスが与えられています。

0グッド

0クリップ

投稿2016/06/11 17:08

編集2016/06/11 17:13

###前提
以下の構成でWebシステムを構築しています。

  • Tomcat7
  • commons-logging-1.1.1

以下、log4j.propertiesの内容です。system.logファイルにログを出力しています。

Properties:log4j.properties

1log4j.appender.consoleLog=org.apache.log4j.ConsoleAppender 2log4j.appender.consoleLog.Target=System.out 3log4j.appender.consoleLog.layout=org.apache.log4j.PatternLayout 4log4j.appender.consoleLog.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss}][%p][%c{1}] %m%n 5 6log4j.appender.fileLog=org.apache.log4j.RollingFileAppender 7log4j.appender.fileLog.File=C:/tmp/system.log 8log4j.appender.fileLog.layout=org.apache.log4j.PatternLayout 9log4j.appender.fileLog.layout.ConversionPattern=<%d> %m%n

###実現したいこと
Exception.printStackTraceや、JSP構文エラーなど、標準エラー出力の内容を、system.logファイルに出力したいです。
理由は、アプリに関するログ情報を1ファイルにまとめたいからです。

現在、標準エラー出力はTomcatのログファイルに出力されます。
アプリでエラーや問題が発生した場合、まずsystem.logを確認して、問題の原因が分からなかったらTomcatのログを確認します。
この手順が、以下の点で面倒です。

  • ファイルの置き場所が異なる2つのファイルを確認しなくてはいけない
  • Tomcatログには他のアプリの情報も出力されていて、分かりづらい。(現在Tomcatに複数のアプリがデプロイされている)

ソースでは、e.printStackTrace();を、log.error(message, e);に置き換えて、stackTraceはsystem.logに出力しています。
なので、通常Tomcatログを確認することはありません。
が、やっぱり標準エラー出力をsystem.logに出力して、1ファイルにまとめたいです。
ご存知でしたら教えてください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

未検証ですが、「org.apache.jasper.JasperException」の発生等、Exceptionが明確になっているようであれば、JSP例外処理用サーブレット・フィルタを実装し、フィルタ内でcatchしてsystem.logにExceptionを出力する方法はいかがでしょうか。
Exception.printStackTrace()log.error()に書き換える今のルールが良いと思います。

以下、doFilter()のイメージです。

Java

1 2 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 3 throws ServletException, IOException{ 4 5 try { 6 chain.doFilter(request,response); 7 } 8 catch ([対象となるException] e) { 9 log.error("JSPエラー発生", e); 10 11 // 上位へ再スロー, 必要に応じて共通エラー画面へ遷移などに変更。。。 12 throw e; 13 } 14 }

投稿2016/06/14 05:18

takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuji38kwmt

2016/06/18 03:21

ありがとうございます。 JasperExceptionはあくまで例でして、出力したExceptionは明確になっていません。 ですから、「エラーが発生した場合は、アプリのログとTomcatのログ両方を確認する」というルールで運用していきたいと思います。
takyafumin

2016/06/18 13:37

すみません、例が悪かったかもしれません。 catchするExceptionは「JasperException」ではなくても「Exception」とすることも可能です。そうすると「JasperException」以外にもRuntimeException系やServletExceptionもcatchすることができます。 tomcatログと一部冗長になりますが、Exceptionでcatchしてログ出力することで、 ・tomcatログには今まで通りの出力 ・アプリケーションログにはすべてのExceptionの出力 とすることができます。 ご参考までに。
guest

0

理由は、アプリに関するログ情報を1ファイルにまとめたいからです。

他アプリのログは制御できないので、結局、次の経路でログが出力されます。

他アプリ→System.out/System.err→Tomcatログ
自アプリ→FileAppender→system.log

ログ出力の経路が異なりますから、同じファイルに出力させることはできません。

投稿2016/06/13 17:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問