Содержание

Как в Python сохранять информацию в журнал

Про форматы, немного о журналировании и пример кода на Python

Допустим, что тебе нужно сохранить некоторую информацию о каком-либо событии и времени, когда оно случилось в файл журнала. Одним из самых подходящих для этого форматов файла является JSON.

Что такое JSON

JSON (JavaScript Object Notation) - это легкий формат, который используется повсеместно для обмена данными. Он основан на подмножестве языка JavaScript (способ построения объектов в JavaScript). Как отмечено в MDN, некоторые JavaScript не являются JSON, а некоторые JSON не являются JavaScript.

Примером того, где такой формат используется очень широко, являются ответы веб сервисов. В “старые” времена веб сервисы использовали XML в качестве основного формата для передачи данных, но с тех пор, как появился JSON (формат JSON определен в RFC 4627 Дугласа Крокфорда), этот формат стал предпочтительным, поскольку он гораздо более легкий.

Вы можете найти много дополнительной информации на официальном сайте JSON и в этом отличном ответе на StackOverflow.

Функция журналирования

Вот пример функции для сохранения информации в журнал на Python. Мы будем вызывать ее в момент события, и она будет сохранять всю необходимую информацию в журнал.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def write_to_log(file_object, event_name, description, value):
    """Write message to a log file"""
    event_time = str(datetime.datetime.now())
    data = OrderedDict()
    data['time'] = event_time
    data['event'] = event_name
    data['details'] = description
    data['value'] = value
    json.dump(data, file_object, separators=(', ', ':'))
    file_object.write('\n')

Пример использования

Сначала нам нужно открыть файл журнала для добавления в него информации. Мы будем использовать режим дополнения журнала и для этого используем флажок “a” - append.

1
LOG = open("log.txt", "a", encoding='utf-8')

Затем мы записываем информацию о событии в журнал:

1
2
3
4
5
for i in range(5):
    EVENT_NAME = 'EVENT_' + str(i)
    WHAT_HAPPENED = 'HAPPENED_' + str(i)
    SOME_VALUE = i
    write_to_log(LOG, EVENT_NAME, WHAT_HAPPENED, SOME_VALUE)

Это создаст красиво отформатированный файл журнала:

1
2
3
4
5
{"time":"2019-11-03 13:38:56.822216", "event":"EVENT_0", "details":"HAPPENED_0", "value":0}
{"time":"2019-11-03 13:38:56.822317", "event":"EVENT_1", "details":"HAPPENED_1", "value":1}
{"time":"2019-11-03 13:38:56.822369", "event":"EVENT_2", "details":"HAPPENED_2", "value":2}
{"time":"2019-11-03 13:38:56.822410", "event":"EVENT_3", "details":"HAPPENED_3", "value":3}
{"time":"2019-11-03 13:38:56.822449", "event":"EVENT_4", "details":"HAPPENED_4", "value":4}

Надеюсь, тебе это поможет.