簡體   English   中英

如何在Java中不向server.log拋出異常

[英]how to not throw exceptions to server.log in java

在我的應用程序中,我正在使用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:

<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>

所有未捕獲的異常都將進入服務器日志。 如果您希望某些東西不去那里,請不要拋出RuntimeException

如果要停止方法執行,只需從方法中return即可。

如果您也想在調用方方法中停止執行,則不要拋出未檢查的異常。 聲明要引發已檢查異常的方法,並捕獲該異常並將其記錄在調用方中。

可以為未捕獲的異常設置自定義異常處理程序:

Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);

但是我建議您更改代碼,而不是將此類“ hacks”放置在隨機的位置。

相關問題: 如何配置log4j不打印異常stactrace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM