21

Log4j (および Commons Logging) を使用して、エラー メッセージをログに記録します。ここで、致命的なエラーを syslog に出力する追加のログ アペンダーを設定しますが、例外的に長い Java スタック トレースはありません (それらは完全なログ ファイルで引き続き利用可能です)。

これをどのように構成しますか(log4j.xmlを使用)? スタック トレースを無視するフィルタはありますか?

4

8 に答える 8

17

ソースをもう少し読んだ後に編集します。

引き続き PatternLayout をサブクラス化する必要がありますが、オーバーライドするメソッドは ignoresThrowable() です。これは false を返す必要があります。これにより、アペンダーが Throwable を書き込むことができなくなります (レイアウトが既に行っていると想定されます)。

構成でこれを指定する方法はありません。PatternLayout にはハードコーディングされた「true を返す」があります。

于 2008-12-08T03:32:25.157 に答える
11

私が使用する実際のコードは次のとおりです。

import org.apache.log4j.PatternLayout;

public class NoStackTracePatterLayout extends PatternLayout {

 @Override
 public boolean ignoresThrowable(){
  return false;
 }
}
于 2009-11-24T08:58:33.613 に答える
9

log4j > 1.2.16 を使用する場合は、EnhancedPatternLayoutレイアウトを使用できます。

例 (log4j.properties ファイルを使用) をアペンダーのレイアウトとして定義%throwable{0}し、変換パターンを追加します。

log4j.appender.XXX.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.XXX.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n%throwable{0}
于 2015-03-25T17:02:38.953 に答える
6

1.2.16 では EnhancedPatternLayout を使用できます

于 2010-06-15T20:13:49.380 に答える
2

logback-classic (log4j の後継) の「nopex」または「nopeexception」変換ワードは、スタック トレースの出力を無効にします。「nopex」変換語は、残りの変換語と一緒に文書化されています。少し下にスクロールする必要があります。

このトピックについてさらに情報が必要な場合は、logback-user メーリング リストに連絡してください。

于 2009-05-29T14:47:15.833 に答える
1

これを行うには、カスタム レイアウトを作成する必要がある場合があります (これはそれほど悪いことではありません。PatternLayout をサブクラス化できます)。

于 2008-12-08T03:20:59.160 に答える
0

ソースコードを変更できる場合は、別のオプションを検討できます。

私のアプリケーションでは、アプリケーションのエントリ ポイント (「main()」など) からの FATAL メッセージのみを常にログに記録します。

したがって、この 1 か所 (複数のアプリケーション エントリ ポイントがある場合は少数) で、「syslog」などの特別なクラスまたは MDC を使用して Log4j ロガーをインスタンス化します。まもなく致命的なエラーをキャッチしたら、通常の方法で (他のログ ファイルなどのために) ログに記録しますが、この新しい「syslog」ロガーで Fatal() メソッドを呼び出して、正確なメッセージのみを表示します。が必要です (例外クラスとメッセージのみで、スタック トレースがないなど)。次に、Log4j を構成して、この「syslog」クラスまたは MDC のみを、SysLog を対象とする新しく構成されたアペンダーに送信します。

タダム!

于 2008-12-08T05:55:43.763 に答える