1

次のようにエラースタックトレースを出力するjsp Webアプリケーションがあります。

    catch (SQLException e) {
        e.printStackTrace(System.out);
    }

しかし、本番環境では、アプリケーションで何かを印刷したくありません。グローバル フラグを設定したい (例: Debug = true) 。次に、このようなコードを更新します

  if(debug) e.printStackTrace(System.out);

アプリケーションに多くのページがあります。デバッグ変数をどこで宣言する必要がありますか? web.xml ファイルに入れることはできますが、安全かどうかはわかりません。ありがとう

4

1 に答える 1

3

JB Nizet が提案するようなロギング API を使用します。使い方はかなり簡単です。非常に人気のあるApache ( http://logging.apache.org/log4j )の Log4j を使用してロギングを実装する小さな例を次に示します。

すべてのクラスには、ロガーのインスタンスが用意されています

private static final Logger log = Logger.getLogger(this.getClass());

次に、例外をキャッチする場所で

catch (SQLException e) {
    log.debug(e);
}

log4j.properties次に、で使用してLog4jを構成するだけですclasspath

log4j.appender.stdout.Target=System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

log4j.rootLogger=debug, stdout

ロギングをオフにするには、変更するのと同じくらい簡単です

log4j.rootLogger=warn, stdout

これが意味することは、警告レベル以上 (エラーや致命的など) のログ ステートメントのみに関心があるということです。約 6 つのログ レベルがあります。致命的、エラー、警告、情報、デバッグ、およびトレースです。レベルを設定すると、指定したレベルよりも低いレベルでログを記録するすべてのログ ステートメントが無視されます。

上記のことを単純化したことに注意してください。log4j.xmlの代わりに使用することをお勧めします.properties。最新の API では、ログを記録する前にチェックを行うことで、ある程度のパフォーマンスを得ることができます

catch (SQLException e) {
    if (log.isDebugEnabled()) log.debug(e);
}

Globals.DEBUGしかし、実行前にフラグをチェックするだけでなく、フレームワークを使用することの本当のセールス ポイントprintStackTrace()は、それが将来の証明になることです。物事をファイルに記録する必要がある場合は、明日言ってConsoleAppenderくださいFileAppender. このユースケースfatalのためだけに使用される何かについてメールを配信したい。SMTPAppender他のアペンダーはそのまま構成されたままです。

于 2013-05-03T14:06:53.160 に答える