0

私のアプリケーションでは、すべてのメッセージをスローする必要がlog4jある場所を使用しています。my_system.log私が抱えている問題は、エラーが発生したときにそれが表示されることserver.logです(これが発生したくない)。

public String getAccessFlag (String userId, String participantCode, String roleId) {
    HashMap parmMap = new HashMap();
    parmMap.put("userId", userId.toUpperCase());
    parmMap.put("roleId", roleId);
    log.info(parmMap);
    try {
        getSqlMapClientOltp().queryForList("auth.getAccess", parmMap);
    } catch (SQLException ex) {
        log.error(ex, ex);
        throw new RuntimeException (ex);
    }
    List result = (List)parmMap.get("Result0");
    return ((String)(((HashMap) result.get(0)).get("accessVoucher"))).trim();
}

ご覧のとおり、ログインしたいので例外をキャッチしていますmy_system.logが、(エラーが発生したため)実行を停止したいので、エラーを再度スローします。

私はそれを投げているので、server.logに表示されていると思います。

どうすればこれを回避できますか?

アップデート:

以下は私のアペンダーです:

<appender name="myAppender" class="org.apache.log4j.AsyncAppender">
    <appender-ref ref="myFile" />
</appender>

<appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../systems/my/log/my_system.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="[%d{dd/MMM/yyyy:HH:mm:ss.SSS}]~[%-5p]~[%c:%M]~[%m]%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="TRACE#com.org.common.logging.HUDLogLevel" />
        <param name="LevelMax" value="FATAL" />
    </filter>
</appender>
4

1 に答える 1

1

キャッチされなかったすべての例外は、サーバー ログに記録されます。何かがそこに行かないようにしたい場合は、を再スローしないでくださいRuntimeException

メソッドの実行を停止したい場合は、単にreturnメソッドから。

呼び出し元メソッドでも実行を停止したい場合は、チェックされていない例外を再スローしないでください。チェックされた例外をスローするメソッドを宣言し、それをキャッチして呼び出し元に記録します。

キャッチされていない例外のカスタム例外ハンドラーを設定できます。

Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);

しかし、そのような「ハック」をランダムな場所に配置するのではなく、コードを変更することをお勧めします。

関連する質問:例外 stactrace を出力しないように log4j を構成するにはどうすればよいですか?

于 2010-08-23T18:21:24.797 に答える