Объемное управление набором через REST (УСПОКОИТЕЛЬНЫЙ) API

Я записал некоторый пользовательский код для нахождения моего RollingFileAppender (который является излишне трудным получить доступ к в log4j!), который я затем вызываю для переворачивания. Я адаптировал свой код ниже к единственному использованию. Я использую код, подобный этому при запуске приложения, чтобы вынудить мои журналы прокрутиться (если непустой), таким образом, я всегда запускаю в новом журнале, но никогда не удаляю журнала, но самого старого.

Этот код берет данный Регистратор и циклы иерархия регистратора, пока это не находит Регистратор, которому присоединили Appenders. Если это никогда не делает, то это сдается. Если это делает, это циклично выполняется по всему Appenders, подключенному к тому Регистратору и для каждого, который является RollingFileAppender, это вынуждает журнал прокрутиться.

Что-то вроде этого должно быть намного легче сделать в log4j, но я не нашел более простой способ сделать его.

public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}
72
задан mattwynne 20 November 2008 в 18:08
поделиться

2 ответа

Вы можете рассматривать задачу изменения как ресурс сам по себе. Таким образом, вы действительно помещаете один объект, который является объектом массового обновления данных. Возможно, у него есть имя, владелец и большой двоичный файл CSV, XML и т. Д., Который необходимо проанализировать и выполнить. В случае CSV вы можете также определить, какой тип объектов представлен в данных CSV.

Список заданий, добавить задание, просмотреть статус задания, обновить задание (возможно, для запуска / остановки это), удалить задание (остановив его, если оно запущено) и т. д. Эти операции легко отображаются на дизайн REST API.

После того, как вы это сделаете, вы можете легко добавлять различные типы данных, которые может обрабатывать ваше средство массового обновления данных, возможно, даже смешанные вместе в одной задаче. Там' Другими словами, нет необходимости дублировать один и тот же API во всем приложении для каждого типа импортируемого объекта

. Это также очень легко поддается реализации фоновой задачи. В этом случае вы, вероятно, захотите добавить поля к отдельным объектам задач, которые позволяют клиенту API указать, как они хотят получать уведомления (URL-адрес, который они хотят, чтобы вы ПОЛУЧИЛИ, когда это будет сделано, или отправьте им электронное письмо и т. Д.) .

62
ответ дан 24 November 2019 в 12:45
поделиться

Да, PUT создает / перезаписывает, но не обновляет частично.

Если вам нужна семантика частичного обновления, используйте PATCH. См. http://greenbytes.de/tech/webdav/draft-dusseault-http-patch-14.html .

9
ответ дан 24 November 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: