Правила та поради щодо ведення лісозаготівлі?


13

У моїй організації ми зібрали кілька правил / рекомендацій щодо ведення журналів, які я хотів би знати, чи можете ви додати чи коментувати.

Ми використовуємо Java, але ви можете взагалі коментувати вхід - правила та поради

  1. Використовуйте правильний рівень реєстрації

    • ПОМИЛКА: Щось пішло не так і потрібно негайно виправити
    • ПОПЕРЕДЖЕННЯ. Процес може тривати без виправлення. Програма повинна терпіти цей рівень, але попередження завжди має бути вивчене.
    • ІНФОРМАЦІЯ: Інформація про важливий процес закінчена
    • ВІДЛАГОДЖУВАТИ. Використовується лише під час розробки
  2. Переконайтеся, що ви знаєте, що ви реєструєте.

  3. Уникайте, щоб реєстрація впливала на поведінку програми

Функцією ведення журналу повинно бути записування повідомлень у журнал.

  1. Повідомлення журналу повинні бути описовими, чіткими, короткими та стислими.

Немало використання дурницького повідомлення при усуненні несправностей.

  1. Покладіть потрібні властивості в log4j

Введіть, що правильний метод і клас записуються автоматично.

Приклад:

Датированний файл - веб

log4j.rootLogger=ERROR, DATEDFILE
log4j.logger.org.springframework=INFO
log4j.logger.waffle=ERROR
log4j.logger.se.prv=INFO
log4j.logger.se.prv.common.mvc=INFO
log4j.logger.se.prv.omklassning=DEBUG

log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender
log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n

log4j.appender.DATEDFILE.Prefix=omklassning.
log4j.appender.DATEDFILE.Suffix=.log
log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/
  1. Значення журналу.

Будь ласка, введіть значення програми.

  1. Префікс журналу.

Вкажіть, з якої частини заявки йдеться про те, що журнал записується, бажано, за допомогою чогось узгодженого з префіксом проекту, наприклад PANDORA_DB

  1. Кількість тексту.

Будьте обережні, щоб не було занадто багато тексту для реєстрації. Це може вплинути на ефективність програми.

  1. Формат реєстрації:

-Існує декілька варіантів і методів, що використовуються з log4j, але ми хотіли б, щоб увійти за винятками, було впорядковано наступний формат:

logger.error("PANDORA_DB2: Fel vid hämtning av frist i TP210_RAPPORTFRIST", e);

У наведеному вище прикладі передбачається, що ми встановили властивості log4j так, що він автоматично записує клас та метод.

Завжди використовуйте реєстратор, а не таке:

System.out.println(), System.err.println(), e.printStackTrace()

Якщо веб-додаток використовує наш фреймворк, ви можете отримати дуже детальну інформацію про помилки від EJB, якщо використовуєте спробу лову в обробнику та ведення журналу відповідно до наведеної вище моделі:

У нашому проекті ми використовуємо цю схему перетворення, за допомогою якої імена методів та класів виписуються автоматично. Тут ми використовуємо два різних патента для консолі та для дати fileappender:

log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.DATEDFILE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

І в наведених вище прикладах метод і клас будуть виписані. У номері рядка консолі також буде написано наш.

  1. toString()

Будь ласка, майте toString()для кожного об'єкта. EX:

@Override
public String toString() {
  StringBuilder sb = new StringBuilder();
  sb.append(" DwfInformation [ ");
  sb.append("cc: ").append(cc);
  sb.append("pn: ").append(pn);
  sb.append("kc: ").append(kc);
  sb.append("numberOfPages: ").append(numberOfPages);
  sb.append("publicationDate: ").append(publicationDate);
  sb.append("version: ").append(version);
  sb.append(" ]");
  return sb.toString();
}

замість спеціального методу, який робить ці результати

public void printAll()
{
    logger.info("inbet: " + getInbetInput());
    logger.info("betdat: " + betdat);
    logger.info("betid: " + betid);
    logger.info("send: " + send);
    logger.info("appr: " + appr);
    logger.info("rereg: " + rereg);   
    logger.info("NY: " + ny);   
    logger.info("CNT: " + cnt);   
}

То чи є щось, що ви можете додати, коментувати або вважати сумнівним за допомогою цих способів використання журналу? Не соромтеся відповідати чи коментувати, навіть якщо це не пов’язано з Java, Java та log4j - це лише реалізація того, як це аргументовано.



1
@gnat - Я думаю, що ти маєш рацію, між двома питаннями багато перекриттів. Я намагаюся назвати це дублікатом.

Відповіді:


4

Як розширення вашого правила ведення журналу, звідки в додатку походить оператор журналу, ви можете додати прапорiв журналу на рівні модуля. Замість того, щоб весь час реєструвати, це дозволяє вам вибірково орієнтуватися на розділи вашої програми. У цьому є накладні витрати, і вам потрібно створити об'єкт, який дозволяє ввімкнути / вимкнути цей журнал. В ідеалі ви зможете ввімкнути / відключити під час роботи програми, коли програма працює.

Я звик бачити шар під налагодженням, який я називаю "Слідом", але це не обов'язково універсальний термін. "Trace" протоколів рівня записів на стільки, на скільки ви можете стояти, включаючи вхід / вихід модуля, часові позначки з входом / виходом та бонусні бали за фіксацію переданих значень. Очевидно, що генерується багато даних, і це не те, що ти вмикаєш вольово-невольно. Але він має переваги щодо налагодження, коли ви не можете приєднатись до процесу або у вас немає основного дампа програми-заблуди.

Мені подобається бачити посилання на файли / модулі та часові позначки з моєю інформацією журналу. Це може бути зручно при спробі розшукувати умови перегонів між потоками, а також координувати діяльність у кількох областях програми. Якщо чесно, я знаю деяких людей, які думають, що ці деталі захаращують файл журналу. Додавання в мітку часу - це те, що потрібно обговорити з командою. (Вибачте, якщо log4j вже робить це.)

Якщо ведення журналу не береться за власну нитку / процес, це теж слід враховувати. Замість того, щоб змусити потік програми чекати, коли журнал обробляється, повідомлення журналу передається оброблювачу журналу, і потік програми продовжує веселий шлях. Крім того, створення якогось буферного механізму для обробки журналів повідомлень - це ще один спосіб прискорити реакцію програми.

Інша особливість, яку слід враховувати, має контроль над розміром та історією файлів журналів. Ви не хочете, щоб програма видувала весь дисковий простір в хост-системі, а також не обов'язково зберігати всі файли журналу на всю вічність.


2

Одне, що потрібно пам’ятати, - це перевірити рівень реєстрації, перш ніж робити будь-які рядкові операції для ведення журналу. Тобто, не займіться усією роботою з налаштування форматера дати або об'єднання купи рядків для створення повідомлення журналу, якщо ви насправді не збираєтесь його реєструвати. Це просто даремна робота, яка уповільнює вашу програму.

FYI, проект Apache Commons має ToStringBuilder клас, який спрощує створення ваших toString()методів.


1

Я не знаходжу нічого сумнівного в тому, що ви додали сюди Ніку. Ось так я це роблю вже певний час. Повідомлення, яке ви надали, є дуже детальним і, ймовірно, може бути використане як своєрідний підручник для ведення журналів. Однак я хочу додати тут одне, а саме: У багатьох місцях я бачив глави, використовуючи умовний журнал, наприклад:

     if(env_local)
     {
     write_to_local();
     }    
     else if(env_IT)
     {
     write_to_IT();
     } 
     else if(env_PROD)
     {
     write_to_prod();
     } 
     else
     dosomething();

Я думаю, що подібне умовне відстеження чи налагодження - не найкращий шлях.


1

Окрім реєстрації класу / методу, що призвів до помилки, було б корисно також записати параметри, передані в цей метод. Знання місця виникнення помилки не дуже корисне, якщо це відбувається лише 1 раз з 1000; вам також потрібно знати, які дані спричинили помилку.

Також мені було корисно мати змінну, яка визначає рівень заходу за замовчуванням для програми. Таким чином, ви можете мати код DEBUG та INFO поряд із кодом ПОПЕРЕДЖЕННЯ та ПОМИЛКИ. Під час запуску у виробничому режимі ви за замовчуванням не виводить інформацію про DEBUG, але коли з'являється помилка, ви можете оновити прапор і почати також писати повідомлення DEBUG у журнал.


1

Лісозаготівля - це більшість випадків наскрізних проблем. Сам Java не є достатньо виразним, щоб ви могли відокремити ведення журналу від вашої фактичної логіки бізнесу. Це означає, що ви не можете, наприклад, просто взяти один метод і перенести його в інший проект, але вам доведеться видалити і відрегулювати весь журнал, перш ніж робити. І це лише верхівка айсберга.

Щоб запобігти тому та іншим проблемам під час змішування журналів та "справжньої" ділової логіки, слід врахувати використання аспектного орієнтування. Для Java найбільш використовуваним фреймворком був би AspectJ. Існує це відео на YouTube з технічних переговорів google, в якому досить добре пояснюється AspectJ та його використання за межами журналу. Ви знайдете багато прикладів для того, щоб записати себе, звичайно, і тут на stackexchange .


0

Я б хотів би сказати, що у вас є спосіб мати декілька контекстів журналу, пов'язаних з будь-яким конкретним файлом журналу, і організувати так, що все, що записується в будь-який контекст журналу, буде зареєстровано, якщо код прямо не вимагає від контексту журналу відкинути його вміст. Така конструкція дозволить зафіксувати досить детальні журнали під час операції та відкинути їх, якщо операція пройде успішно, але мати їх доступними, якщо операція не вдасться. Відсутність такої функції ведення журналу, якщо доступні добрі журнали, коли щось не вдасться, може знадобитися, щоб програма витрачала багато часу на реєстрацію непотрібних даних у 99,99% випадків, коли все працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.