Как реализовать ведение журнала log4j в существующем веб-приложении J2EE Struts? - PullRequest
3 голосов
/ 06 мая 2010

Я недавно унаследовал веб-приложение J2EE Struts, которое было написано еще в 2002 году. В приложении нет регистрации, кроме нечетного System.out.println ().
Я добавил log4j, чтобы я мог записать некоторую информацию на консоль, но я обеспокоен тем, как лучше к этому подойти. Любые предложения, советы, лучшие практики будут приветствоваться, так как я не хочу тратить слишком много времени на добавление журналов в каждый метод или класс (или на поиск мест, где журналирование будет лучше всего - например, блоки / дефекты плохого кода).
Мой текущий подход состоит в том, чтобы просто добавить журналирование к нескольким классам, на которые я смотрел, чтобы понять код, но есть ли несколько ключевых мест, где я могу добавить журналирование, чтобы максимально использовать мое добавление log4j?

Edit:
Обновление прогресса:
Я расширил Struts (v.1) ExceptionHandler и настроил struts-config.xml для использования моего CustomExceptionHandler вместо версии Struts. Затем, переопределив метод execute(), я добавил логику для регистрации исключения, используя log4j. Смотрите ниже:

public class CustomExceptionHandler extends ExceptionHandler {

 static Logger logger = Logger.getLogger(CustomExceptionHandler.class);

 public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException {
  logException(ex);
  return super.execute(ex, ae, mapping, formInstance, request, response);
 }

 private void logException(Throwable thr) {
   // Add code here to log the exception appropiately
   // i.e. logger.error("Exception is: " + ex.getMessage());
}

Также необходимо обновить файл struts-config.xml:

<global-exceptions><br> <exception key="" type="java.lang.Throwable" handler="com.mycompany.CustomExceptionHandler" /><br> </global-exceptions>

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

} catch (Exception e) {
//nothing here
}

Изменено на:

} catch (Exception e) {
 throw new RuntimeException(e);
}

Ответы [ 2 ]

2 голосов
/ 06 мая 2010

Самое главное, я бы настроил обработчик исключений Struts в struts-config.xml, чтобы перехватывать все, что было выброшено из действий, и регистрировать его. Затем я проверил бы всю обработку исключений, чтобы увидеть, какие исключения съедаются, записываются в stdout или иным образом не вносятся в журнал, и вносить изменения, чтобы каждое исключение, которое не может быть эффективно обработано, распространялось (помещалось в непроверенный исключения, если это необходимо), чтобы сделать его обработчиком исключений.

Кроме того, я бы хотел, чтобы вы описали это, добавив запись в разделы, где это непосредственно полезно. Пока исключения генерируются и попадают в обработчик исключений, делать больше нечего.

0 голосов
/ 06 мая 2010

Если единственное, что идет в System.out (System.err), это старая запись в журнал, и вы ищете простое решение, вы всегда можете перенаправить System.out в класс-оболочку вокруг регистратора при запуске Жизненный цикл вашего приложения:

public class LoggerStream extends PrintStream {
  Logger legacyLogger = Logger.getLogger("app.legacyLogger");

  ...

  public void println(String s){
    legacyLogger.log(s);
  }
}

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

...