-
Notifications
You must be signed in to change notification settings - Fork 16
Russian
Alogger - это простой для конфигурации и использования логгер для erlang'a. Используя alogger выполучаете:
- Возможность написать свой собственный логгирующий модуль и интегрировать его в систему в рантайме.
- Для каждого модуля и приоритета логгирования вы можете настроить необходимый логгирующий модуль. Так же существует настройка по тегам в независимости от модулей.
- Изменение приоритета логгирования осуществляется на лету. Без какого-либо overhead'a. Это значит что фильтрация лог-сообщений происходит максимально быстро. Спасибо parse_transform :-)
- Перехват сообщений error-logger'a. Если до alogger'a вы использовали обычный error-logger, вам не нужно переписывать ваш код. В alogger предусмотрена возможность перехватывать сообщения error-logger'a и перенаправлять их в необходимый логгирующий модуль. Включен по умолчанию
- Магия parse_transform так же позволяет сократить ваши лог-сообщения в модулях. Это очень удобно для отладочных целей :-)
- alog_tty: просто принтауты. Используется io:format/2.
- alog_syslog: интерфейс для syslog.
- alog_scribe: интерфейс для scribe.
- alog_disk_log: интерфейс для disk_log
В alogger представлено 8 приоритетов логгирования.
Приоритет | Описание |
---|---|
0. emergency | Система вышла из строя |
1. alert | Сделайте что-нибудь немедленно! |
2. critical | Критическое состояние |
3. error | Ошибка |
4. warning | Серьезное предупреждение |
5. notice | Предупреждение |
6. info | Информационное сообщение |
7. debug | debug-level сообщение |
Чем серьезнее ошибка, тем меньше её номер. Это нужно учитывать при конфигурации фильтра в flows. Например, warning > critical, emergency < info или error < debug.
Для того чтобы начать использовать alogger в своем проекте вам достаточно добавить его в rebar.config своего проекта в секцию зависимостей deps. Делается это так:
{deps, [{alog, ".*", {git, "git://github.com/siberian-fast-food/alogger.git", "master"}}]}.
По умолчанию потоки логгирования (flows) в alogger настроены так, чтобы лог-сообщения печатались в консоль внезависимости от модуля в котором расположен макрос логгирования.
Далее включите заголовочный файл alog.hrl в заголовок модуля в котором необходимо логгирование:
... -include_lib("alog.hrl"). ...
В заговочном файле содержатся макросы, которые следуется использовать в вашем коде. Допустим, что flows у вас следующие (те, что по умолчанию):
(alog_dev@garry-desktop)5\> alog_control:get_flows(). {ok,[{flow,2,{mod,['_']},{'=<',debug},[alog_tty],true}, {flow,1, {mod,[alog_examples]}, {'=<',debug}, [alog_tty], true}]}
Пример:
parse_header(H) -> ... {ok, HeaderSize, Data} = strip_header(H), ?DEBUG("Size = ~p Data = ~p",[HeaderSize, Data], header_test), ok.
В консоли вы увидите следующее сообщение:
2011-11-12 19:39:03:362285 test_module:456:debug [<0.52.0>]->[header_test]: Size = 16 Data = "MyData"
Описание по порядку:
- 2011-11-12 - дата
- 19:39:03:362285 - время
- test_module - имя модуля
- 456 - номер строки
- debug - приоритет лог-сообщения
- [<0.52.0>] - идентификатор процесса, написавшего в лог
- [header_test] - тег сообщения. Третий параметр в макросе ?DEBUG
- Size = 16 Data = "MyData" - отформатированное лог-сообщение.
Также стоит заметить, что функция логгирования вызывается в контексте процесса писавшего в лог. Т.е. alogger не создает для записей дополнительных процессов и не обменивается сообщениями ни с процессами в контексте которых вызывается макрос записи в лог, ни с самим логерами.
С остальными макросами вы можете ознакомиться в alog.hrl
От настройки потоков логгирования (flows) зависит из каких модулей и какие лог-сообщения у вас будут посылаться в необходимый логгер. Потоки логгирования по умолчанию находятся в priv/alog.config
Рассмотрим секцию flows из этого файла:
... {flows, [ {{mod, ['_']},{'=<', debug}, [alog_tty]}, {{mod, [alog_examples]}, {'=<', debug},[alog_tty]} ]}, ...
Каждый поток логгирования описывается следующим образом:
{Filter, PriorityPattern, Loggers}
Т.е. для первого потока из файла alog.config:
- Filter : {mod, ['_']}
- PriorityPattern : {'=<', debug}
- Loggers : [alog_tty]
Это означает, что из любого модуля лог-сообщения, приоритет которых меньше или равен debug, будут посланы в логгер alog_tty.
Здесь вы можете указать модули из которых лог-сообщения будут залогированны. Также возможно логгирование по тегам. Т.е. при написании лог-сообщения вы указываете его тег и в этом случае в соответствии с этим flow логгирование будет вестись в независимости от модулей.
Логгирование по модулям
Например:
{{mod, [alog_examples]}, ... , ... }
В этом flow будут учитываться только лог-сообщения из модуля alog_examples. Модули могут задаваться следующим образом:
-
{{mod, [mod1, mod2, mod3]}, ... , ... }
- где mod1,mod2,mod3 модули, лог-сообщения из которых должны быть залогированы -
{{mod, ['_']}, ... , ... }
- логгировать все модули. -
{{mod, [{'_', not_for, [modnolog1, modnolog2]}]}, ... , ... }
- логгировать все модули, кроме modnolog1, modnolog2.
Логгирование по тегам
Фильтрация лог-сообщений происходит с помощью тегов в независимости от того в каком модуле они расположены. Пример:
{{tag, [mytag1]}, ... , ... }
Тег может быть задан в логгирующем макросе. Также в одном макросе может быть несколько тегов:
?DBG("~p", ["hello"], [mytag1, mytag2]).
Возможные значения:
-
{{tag, [tag1, tag2, tag3]}, ... , ... }
- лог-сообщения с тегами tag1, tag2, tag3 будут залоггированы. -
{{tag, ['_']}, ... , ... }
- логгировать лог-сообщения с любыми тегами.
Определяет какого приоритета сообщения должны быть залоггированы. Возможные приоритеты указаны выше.
Пример:
{ ... , [{'=<',debug}, {'>=', emergency}] , ... }
В этом примере будут залоггированы сообщения у которых приоритет больше или равен debug, но меньше или равен warning. Т.е. сообщения с приоритетами debug, info, notice, warning будут залоггированы, однако, сообщения с приоритетами error, critical, alert, emergency залоггированы НЕ будут.
Возможные знаки сравнения:
- >
- <
- ==
- =<
- >=
- /=
Также можно просто перечислить приоритеты которые необходимо залоггировать:
{ ... , [debug, alert, emergency] , ... }
Список логгеров. Логгеры "из коробки" указаны выше.
Настройка потоков логгирования в рантайме - alog_control