Java Logger - проблема «без разрыва строки» и «явное ведение журнала класса» - PullRequest
1 голос
/ 24 июля 2009

В настоящее время я борюсь с двумя проблемами, связанными с java.util.logging.Logger:
1) Я хотел бы иметь метод (удобство), такой как методы "info () / fine ()"Единственное, что эти методы не должны вставлять разрыв строки после вывода (такие функции, как System.out.print и println). Я уже переопределил метод format () - было бы уместно просто добавить «no-linebreak-flag» к записи журнала и проанализировать это в методе format или это будет слишком медленно (потому что я используюприложение реального времени ". Каков будет правильный способ достижения sthg как этот?

2) В настоящее время у меня есть фабричный класс, который создает желаемый Logger (я различаюсь между FileLogging и Console Logging) - но я не могу действительноузнайте, как можно подробно сообщить Logger, какие пакеты / классы («модули») регистрировать, а какие нет. Или я должен проверить флаг Debug в каждом классе, а затем либо создать Logger (debug == true)или нет? Также я хотел бы выполнить все необходимые настройки с помощью исходного кода, а не файла Logging-Properties, если это возможно ...

У меня небольшое чувство, что что-то есть в Logger, которого я еще не совсем понял^^

Заранее спасибо!

1 Ответ

1 голос
/ 24 июля 2009

на # 2 - вы должны поместить всю эту информацию в файл конфигурации регистрации. Все дело в том, что вы «нарезаете» подобные вещи из своего кода в файлы свойств.

По сути - вы всегда вызываете logger.debug () в своем коде, и если ведение журнала настроено на фильтрацию отладочных сообщений, вы не увидите вывод hem

Я видел коднапример,

if(logger.debugenabled()){
   logger.debug();
}

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

О - и я проверил исходный код консольного приложения. Похоже, что новая строка жестко закодирована.

      for (int i = 0; i < len; i++) {
        this.writer.write(s[i]);
        this.writer.write(Layout.LINE_SEP);
      }
    }
  }
...