Должен ли регистратор Log4J быть объявлен временным?

в bluehost я не смог сбросить пароль; с этим драйвером работал:

MAIL_DRIVER=sendmail
30
задан Dan Dyer 17 September 2008 в 11:51
поделиться

9 ответов

Как насчет того, чтобы использовать статический регистратор? Или Вам нужна различная ссылка регистратора для каждого экземпляра класса? Статические поля не сериализируются по умолчанию; можно явно объявить, что поля сериализируют с частным, статическим, заключительным массивом ObjectStreamField названный serialPersistentFields. См. документацию Oracle

Добавленное содержание: Поскольку Вы используете getLogger (getClass ()) , Вы будете использовать тот же регистратор в каждом экземпляре. Если Вы хотите использовать отдельный регистратор для каждого экземпляра, необходимо дифференцироваться на названии регистратора в getLogger () - метод. например, getLogger (getClass () .getName () + хэш-код ()). Необходимо тогда использовать переходный атрибут, чтобы удостовериться, что регистратор не сериализируется.

26
ответ дан PhilippeLM 17 September 2008 в 11:51
поделиться
  • 1
    @teerapap вызов к pool.wait() заставляет поток потерять блокировку на pool. – Bart van Heukelom 27 September 2011 в 08:44

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

2
ответ дан Philip Helger 17 September 2008 в 11:51
поделиться
  • 1
    Какое-либо ключевое имя в plist прекрасно? или это - какое-либо конкретное ключевое имя, должен быть дан.? – Futur 4 June 2012 в 05:59

Если Вы действительно захотите пойти переходный подход, то необходимо будет сбросить журнал, когда объект будет десериализован. Способ сделать, который должен реализовать метод:

 private void readObject(java.io.ObjectInputStream in) 
   throws IOException, ClassNotFoundException;

javadocs для сериализуемый имеет информацию об этом методе.

Ваша реализация его посмотрит что-то как:

 private void readObject(java.io.ObjectInputStream in) 
     throws IOException, ClassNotFoundException {
   log = Logger.getLogger(...);
   in.defaultReadObject();
 }

, Если Вы не делаете, это тогда регистрируется, будет пустым после десериализации Вашего объекта.

9
ответ дан Yishai 17 September 2008 в 11:51
поделиться
  • 1
    Я утверждал бы, что необходимо рассмотреть часть Google Guava стандартной библиотеки. Это - невероятно полезное и намного более высокое качество, чем библиотека свободного городского населения Apache. Как Вы знаете, когда блокировка больше не будет использоваться или уже не заблокирована? Можно попросить, чтобы MapMaker истек записи, которые были созданы некоторое время назад, но это может вызвать нарушения к you' правила взаимного исключения; ре, пытающееся создать (например, если кто-то держит блокировку для больше, чем время истечения срока). – sjr 12 April 2011 в 18:58

Регистратор должен быть статичным; это сделало бы его несериализуемым.

нет никакой причины сделать регистратор нестатичным, если у Вас нет веской причины сделать это так.

11
ответ дан mindas 17 September 2008 в 11:51
поделиться
  • 1
    @McDowell, Который мог быть зафиксирован путем замены Set<String> с Map<String, Thread> и обновления while условие. – Bart van Heukelom 27 September 2011 в 08:46

Или объявите свое поле регистратора как статичное или как переходный процесс.

Оба пути гарантируют writeObject (), метод не попытается записать поле в поток вывода во время сериализации.

Обычно поля регистратора объявляются статичные, но если Вам нужен он, чтобы быть полем экземпляра, просто объявляют его переходный, как его обычно делавшийся для любого несериализуемого поля. После десериализации поле регистратора будет пустым, тем не менее, таким образом, необходимо будет реализовать readObject () метод для инициализации его правильно.

5
ответ дан user9189 17 September 2008 в 11:51
поделиться
  • 1
    синхронизируемый имеет плохую производительность – Pablo Moretti 22 December 2013 в 20:46

Эти виды случаев, особенно в EJB, обычно лучше всего обрабатываются через поток локальное состояние. Обычно вариант использования, что-то как Вы имеет конкретную транзакцию, которая встречается с проблемой, и необходимо поднять вход для отладки для той операции, таким образом, можно генерировать подробное вхождение в систему операции задач. Несите некоторый поток локальное состояние через транзакцию и использование что выбрать корректный регистратор. Откровенно я не знаю, где это было бы выгодно для установки уровня на ЭКЗЕМПЛЯРЕ в этой среде, потому что отображение экземпляров в транзакцию должно быть контейнерной функцией уровня, Вы не будете на самом деле иметь контроля, которого экземпляр используется в данной транзакции так или иначе.

Даже в случаях, где Вы имеете дело с DTO, это обычно не хорошая идея разработать Вашу систему таким способом, которым требуется приведенный определенный пример, потому что дизайн может легко развиться способами, которые делают это плохим выбором. Вы могли приехать месяц с этого времени и решить, что соображения эффективности (кэширование или некоторая другая оптимизация изменения жизненного цикла) повредят Ваше предположение об отображении экземпляров в единицы работы.

2
ответ дан 17 September 2008 в 11:51
поделиться
  • 1
    ВОЗГЛАВЛЯЕТ: Cordova.plist был заменен config.xml в последних версиях PhoneGap – the_new_mr 17 May 2013 в 14:06

Регистраторы не являются сериализуемыми, таким образом, необходимо использовать переходный процесс при хранении их в полях экземпляра. Если Вы хотите восстановить регистратор после десериализации, можно сохранить Уровень (Строка), сочиняют объект, который действительно становится сериализированным.

0
ответ дан Glever 17 September 2008 в 11:51
поделиться
  • 1
    Документация не совсем актуальна в данный момент. Ответы shawkinaw и Ivan корректны. – Uli 2 September 2013 в 21:55

Если бы Вы хотите, чтобы Регистратор был на экземпляр тогда, да, Вы хотели бы сделать его переходным процессом, если Вы собираетесь сериализировать свои объекты. Регистраторы Log4J не являются сериализуемыми, не в версии Log4J, который я использую так или иначе, поэтому если Вы не сделаете свой переходный процесс полей Logger, то Вы получите исключения на сериализации.

0
ответ дан MB. 17 September 2008 в 11:51
поделиться
  • 1
    Папка проекта корректна, но эту папку называют www при создании приложения с интерфейсом командной строки (который, конечно, Вы don' t должны сделать). – Uli 2 September 2013 в 21:53

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

(Как другие упомянули использование, статичное или переходное).

0
ответ дан James A. N. Stauffer 17 September 2008 в 11:51
поделиться
  • 1
    Спасибо Deena, которой последовали Ваш совет. – wael 11 July 2015 в 10:30
Другие вопросы по тегам:

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