понедельник, 21 мая 2012 г.

Logsna – sane формат для ведения логов


Старые добрые файлы логов по прежнему являются надёжным, удобным и полезным источником информации. Если же они ещё имеют удобный для чтения формат и их можно легко использовать вместе с 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.py
import logging
import logging.config
from StringIO import StringIO
CONFIG = """\
[loggers]
keys=root
[handlers]
keys=console
[handler_console]
class=logging.StreamHandler
args=(sys.stderr,)
formatter=sane
[formatters]
keys=sane
[logger_root]
level=DEBUG
handlers=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 / 0
except:
    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 message
INFO     [2012-05-21 01:59:23,686] mylogger.component1: info message
WARNING  [2012-05-21 01:59:23,686] mylogger.component1: warning message
CRITICAL [2012-05-21 01:59:23,686] mylogger.component1: critical message
ERROR    [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
$ [sudo] pip install logsna


Источник

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

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