Obsah

Ako uložiť informácie do súboru protokolu v jazyku Python

O formátoch, niečo o žurnálovaní a príklad kódu v jazyku Python

Predpokladajme, že potrebujete do súboru denníka uložiť nejaké informácie o udalosti a čase, kedy sa stala. Jedným z najvhodnejších formátov súborov je JSON.

Čo je JSON

JSON (JavaScript Object Notation) je ľahký formát, ktorý sa používa všade na výmenu údajov. Je založený na podmnožine jazyka JavaScript (spôsob, akým JavaScript vytvára objekty). Ako je uvedené v MDN, niektoré jazyky JavaScript nie sú JSON a niektoré JSON nie sú JavaScript.

Príkladom, kde sa tento formát používa veľmi intenzívne, sú odpovede webových služieb. V “starých” časoch sa vo webových službách používal XML ako primárny formát na prenos údajov, ale odkedy sa objavil JSON (formát JSON je definovaný v RFC 4627 Douglasa Crockforda), stal sa preferovaným formátom, pretože je oveľa ľahší.

Mnoho ďalších informácií nájdete na oficiálnej webovej stránke JSON a v tejto vynikajúcej odpovedi na StackOverflow.

Funkcia protokolu

Tu je príklad funkcie na ukladanie informácií do protokolu v jazyku Python. Zavoláme ju v čase udalosti a ona uloží všetky potrebné informácie do protokolu.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def write_to_log(file_object, event_name, description, value):
    """Zápis správy do súboru protokolu"""
    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')

Príklad použitia

Najprv musíme otvoriť súbor protokolu, aby sme doň mohli pridať informácie. Použijeme režim rozšírenia súboru protokolu a na tento účel použijeme zaškrtávacie políčko “a” - append.

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

Potom zaznamenáme informácie o udalosti do protokolu:

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)

Tým sa vytvorí pekne naformátovaný súbor protokolu:

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}

Dúfam, že vám to pomôže.