как не бросать исключения для server.log в Java - PullRequest
0 голосов
/ 23 августа 2010

В моем приложении я использую 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.

Как мне избежать этого?

UPDATE:

Ниже приведены мои приложения:

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

1 Ответ

1 голос
/ 23 августа 2010

Все неотслеживаемые исключения будут попадать в журнал сервера.Если вы хотите, чтобы что-то не пошло туда, не перебрасывайте RuntimeException.

. Если вы хотите остановить выполнение метода, просто return из метода.

Если вы хотите остановить выполнение также и в методе вызывающего, не выбрасывайте непроверенное исключение.Объявите метод как выбрасывающий проверенное исключение, перехватите его и зарегистрируйте в вызывающей стороне.

Вы можете установить собственный обработчик исключений для необработанных исключений:

Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);

Но я бы посоветовал изменить код, а не размещать такие «хаки» в случайных местах.

Смежный вопрос: Как настроить log4j так, чтобы он не печатал исключительную строку

...