Старые добрые файлы логов по прежнему являются надёжным, удобным и полезным источником информации. Если же они ещё имеют удобный для чтения формат и их можно легко использовать вместе с tail и grep - они становятся ещё более полезными.
Мы все знаем, что когда с системой происходит что-то странное, быстрый и лёгкий способ получения информации становится критически важным. Цель маленькой утилиты на Python под названием Logsna - предоставить Вам sane формат для логов, что позволит выделить нужную информацию гораздо быстрее.
Logsna предлагает собственный класс logsna.Formatter, который может быть использован в файле конфигурации logging, например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| # sanefmt.pyimport loggingimport logging.configfrom StringIO import StringIOCONFIG = """\[loggers]keys=root[handlers]keys=console[handler_console]class=logging.StreamHandlerargs=(sys.stderr,)formatter=sane[formatters]keys=sane[logger_root]level=DEBUGhandlers=console# Our custom formatter class[formatter_sane]class=logsna.Formatter"""config = StringIO(CONFIG)logging.config.fileConfig(config)log = logging.getLogger('mylogger.component1')log.debug('debug message')log.info('info message')log.warning('warning message')log.critical('critical message')try: 1 / 0except: log.exception('Houston we have a problem') |
The Log Format
Here is an output from the above program:
1
2
3
4
5
6
7
8
9
| DEBUG [2012-05-21 01:59:23,686] mylogger.component1: debug messageINFO [2012-05-21 01:59:23,686] mylogger.component1: info messageWARNING [2012-05-21 01:59:23,686] mylogger.component1: warning messageCRITICAL [2012-05-21 01:59:23,686] mylogger.component1: critical messageERROR [2012-05-21 01:59:23,686] mylogger.component1: Houston we have a problem! Traceback (most recent call last):! File "/home/alienoid/python/sanefmt.py", line 67, in! 1 / 0! ZeroDivisionError: integer division or modulo by zero |
Формат логов
- Все временные метки указаны в формате ISO8601 UTC
- Для выборки сообщений определённого уровня
1
| $ tail -f sanefmt.log | grep '^INFO' |
- Для выборки сообщений определённого логера
1
| $ tail -f sanefmt.log | grep 'component1:' |
- Для отображения полной трассировки исключения с соответствующим сообщением из лога
1
| $ tail -f sanefmt.log | grep -B 1 '^\!' |
Установка
1
|
Комментариев нет:
Отправить комментарий