struts — ведение журнала для каждого слоя (Action, DAO)

Я новичок в struts и хотел бы понять, как обрабатывать ведение журнала для каждого уровня (JSP/ActionForm, Action, DAO) приложения.

Я заметил, что со временем файл журнала ошибок может быть слишком загроможденным и неудобным для просмотра. Как я могу улучшить шаблоны ведения журнала, чтобы разделить ошибки, выдаваемые каждым уровнем приложения?

и я не смог найти способ обработки исключений, возникающих на странице jsp.

Шаблон кода для действия

public ActionForward perform(ActionMapping mapping, 
                              ActionForm form, 
                              HttpServletRequest request, 
                              HttpServletResponse response) 
   throws IOException, ServletException { 

   try {
         // calls the DAO
   }
   catch (CustomDAOException e) {
     log.error(e);
     // inform application there is an error
   }
   catch (Exception e) {
     log.error(e)
     // inform application there is an error
   }
}

Шаблон кода для DAO

public void update() throw CustomDAOException {
try {
    // Prepare a statement to insert a record
    String sql = "INSERT INTO my_table (col_string) VALUES(?)";
    PreparedStatement pstmt = connection.prepareStatement(sql);

    // Insert 10 rows
    for (int i=0; i<10; i++) {
        // Set the value
        pstmt.setString(1, "row "+i);

        // Insert the row
        pstmt.executeUpdate();
    }
} catch (SQLException e) {
    throw new CustomDAOException(e);
}

person ilovetolearn    schedule 03.08.2011    source источник


Ответы (1)


Настройте обработчик исключений в struts-config, позвольте всем исключениям всплывать к нему и регистрируйте их там. Это сделает весь ваш код перехвата и регистрации исключений ненужным.

Что касается JSP, не делайте ничего подверженного ошибкам в JSP, делайте это в действии, а затем добавляйте результаты в атрибуты запроса.

Я предполагаю, что вы можете использовать древнюю версию Struts 1, я видел аналогичный код, в котором им приходилось перехватывать исключения в действиях, очевидно, потому, что обработчики исключений не работали с ранними версиями Struts. Теперь это исправлено, первое, что вы должны сделать, это обновить приложение как минимум до 1.2, а лучше до 1.3. Использование устаревшей версии веб-фреймворка — это плохо, среди исправлений, которые вы упускаете, есть исправления безопасности, поэтому ваше приложение может быть небезопасным.

Глядя на ваш пример кода, это действительно не кажется таким уж плохим. Я не вижу смысла отлавливать различные типы исключений в ваших действиях (что могло бы быть яснее, если бы я знал, что вы упустили), но я не вижу плохих практик, таких как регистрация вещей в каждом слое, а затем их повторное создание (чтобы одна и та же трассировка стека появляется неоднократно), или регистрация исключений и возврат null (поэтому вызывающий код может не знать, что что-то пошло не так), или просто поедание исключений без трассировки. Если вы дадите более подробную информацию о том, какие проблемы вы хотите решить, может быть, я или кто-то другой смогу быть более полезным.

person Nathan Hughes    schedule 03.08.2011
comment
Если я использую более старую версию struts и не могу обновить ее до более новой версии. Любыми способами я могу использовать обработчик глобальных исключений, чтобы поймать все ошибки. - person ilovetolearn; 03.08.2011
comment
@liangteh: трудно понять, почему вы не сможете обновиться. Ты это пробовал? это довольно простое обновление. вам действительно нужно переименовать свои методы действий с выполнения на выполнение, это самое большое изменение. - person Nathan Hughes; 03.08.2011
comment
@liangteh: конечно, если вы действительно не можете обновиться :-( тогда вы можете переопределить ActionServlet или RequestProcessor и самостоятельно реализовать функциональность обработчика исключений. - person Nathan Hughes; 03.08.2011