0

Windows上のTomcat7のバニラインストールで実行されているWebアプリケーションがあり、内部のTomcatログは変更されていません(デフォルト)。私のアプリケーションでは、RollingFileAppenderがTOMCAT / logsディレクトリ(localhost.yyyy-mm-dd.logではない)にある自分のアプリケーションログ(app.log)に書き込むlog4jを使用しています。一部のスタックトレースがapp.logに表示されず、代わりにlocalhost.yyyy-mm-dd.logに表示されることを除いて、ロギングは私のアプリケーションでは正常に機能しているようです。たとえば、私のアプリケーションにはcommons-validatorsクラスがなく、このスタックトレースはapp.logに表示されませんでした。

これらのスタックトレースをapp.logに表示する方法がわかりませんか?私のlog4j.propertiesファイルはここにあります:

### Root Level ###
log4j.rootLogger=WARN, LOGFILE

### Application Level ###
log4j.logger.com.ccn=TRACE

### Spring ###
log4j.logger.org.springframework.core=INFO
log4j.logger.org.springframework.beans=INFO
log4j.logger.org.springframework.context=INFO
log4j.logger.org.springframework.web=INFO

### Configuration for the LOGFILE appender ###
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.MaxFileSize=5MB
log4j.appender.LOGFILE.MaxBackupIndex=10
log4j.appender.LOGFILE.File=$\{catalina.home\}/logs/app.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=[%p %d %t]  %c  [%C{1}.%M(): "%m"]%n
4

2 に答える 2

1

問題が見つかりました。org.springframework.stereotype.Controller アノテーションを使用してコントローラー クラスをマークしています。私が失っていた特定の例外は、このクラスで生成されていました。解決策は、クラスのメソッドに注釈を追加して、@ExceptionHandler次のように例外を Log4j にリダイレクトすることでした。

@ExceptionHandler
public void handleException(Exception e) {
    logger.error("Error: ", e);
}

装飾されたメソッドがないと@ExceptionHandler、スタック トレースが stderr に吐き出され、最終的に localhost.yyyy-mm-dd.log に記録されていました。

于 2012-06-22T14:18:04.873 に答える
0

スタック トレース ロギングはどのように行いますか?

私の場合、

Logger log = Logger.getLogger(HogeServlet.class);
try {
    // Something
} catch (HogeException e) {
    log.error("Hoge Error !!", e); // Print stack trace
}
于 2012-06-20T01:36:32.720 に答える