Feel Good.

29 октября 2010

Настройка логов на примере NLog

Хочу поделиться с Вами своим best practices по настройке логирования на примере NLog. Логи, это первая вещь, которую приходится настраивать при создании нового проекта, причем обычно для каждого нового проекта настройки логирования выглядят, как шаблонное решение, поэтому разумно выделить единый общий шаблон и использовать его в своих проектах. В данной статье рассмотрим мое простое шаблонное решение, которое я успешно применяю во многих своих проектах. Основная идея которую я отразил в шаблоне, это ведение не одного общего лога, а нескольких, каждый из которых лишь отличается уровнем подробности логирования и назначением, это 2 основных и 2 вспомогательных лога.

  • Основные
    1. ShortLog - служит для общей оценки работы приложения и выполнят роль "оглавления" для FullLog. Из-за сравнительно небольших размеров его удобно анализировать.
      • Лог пишется в файл на диск.
      • Уровень логирования задан как Info.
      • Для уровня Error, Fatal записывается только комментарий ошибки.
    2. FullLog - служит для детального анализа работы приложения и включает в себя ShortLog. Анализируется выборочно.
      • Лог пишется в файл на диск.
      • Уровень логирования задан как Debug либо Trace.
      • Для уровня Error, Fatal записывается комментарий ошибки и информация об исключении.
  • Вспомогательные
    1. ConsoleLog - аналогичен ShortLog и служит для мониторинга работы программы.
      • Лог пишется в консоль.
      • Уровень логирования задан как Info.
      • Для уровня Error, Fatal записывается только комментарий ошибки.
    2. SystemLog - аналогичен FullLog, но менее подробен и служит для ведения лога основе EventLog.
      • Лог пишется в EventLog.
      • Уровень логирования задан как Info.
      • Для уровня Error, Fatal записывается комментарий ошибки и информация об исключении.
Что касается самих логов, то у меня существуют несколько правил:
  1. Метку времени в persist-логах предпочитаю полную в формате dd.MM.yyyy HH:mm:ss
  2. Уровень логирования в логах записываю заглавными сразу же после метрки времени и в скобках: 29.10.2010 12:39:40 (INFO)
  3. Все логи ведутся в единой директории log
  4. Лог файлы создаются на текущую дату и располагаются в директории созданной на основе текущей даты в формате yyyy-MM-dd, для удобства сортировки
Приведу пример конфигурационного файла (NLog.config) для NLog:

<?xml version="1.0" encoding="utf-8" ?>

 

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 

  <!-- Путь к log директории -->

  <variable name="logDir" value="./log/${date:format=yyyy-MM-dd}"/>

 

  <!-- Настройка Layout -->

  <variable name="shortLayout" value="${date:format=HH\:mm\:ss} (${level:uppercase=true}): ${message}"/>

  <variable name="commonLayout" value="${date:format=dd.MM.yyyy HH\:mm\:ss} (${level:uppercase=true}): ${message}"/>

  <variable name="detailedLayout" value="${date:format=dd.MM.yyyy HH\:mm\:ss} (${level:uppercase=true}): ${message}. ${exception:format=ToString}"/>

 

  <targets>

 

    <target

      name="consoleLog"

      xsi:type="Console"

      layout="${shortLayout}" />

 

    <target

      name="shortLog"

      xsi:type="File"

      fileName="${logDir}/short.log"

      layout="${commonLayout}" />

 

    <target

      name="fullLog"

      xsi:type="File"

      fileName="${logDir}/full.log"

      layout="${detailedLayout}" />

 

    <target

      name="systemLog"

      xsi:type="EventLog"

      layout="${detailedLayout}" />

 

  </targets>

 

  <rules>

    <!-- Основные log -->

    <logger name="*" minlevel="Trace" writeTo="fullLog" />   

    <logger name="*" minlevel="Info" writeTo="shortLog" />

 

    <!-- Вспомогательные log -->

    <logger name="*" minlevel="Info" writeTo="consoleLog" />

    <logger name="*" minlevel="Info" writeTo="systemLog"/>

  </rules>

 

</nlog>

 

Комментариев нет:

Отправка комментария