Старые добрые файлы логов по прежнему являются надёжным, удобным и полезным источником информации. Если же они ещё имеют удобный для чтения формат и их можно легко использовать вместе с 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
|
Комментариев нет:
Отправить комментарий