10
Logging
Lerking edited this page 2025-03-20 13:17:06 +01:00

Logging

De fleste bruger print() som debugging. Dette er dog ikke noget man gør i færdig software. Her bruger man log filer, som så hvis noget går galt kan analyseres. Og softwaren kan herefter blive opdateret.
I Python gøres dette sådan.

import logging # Importér 'logging' modulet

logger = logging.getLogger(__name__) # Opretter en log, samtidig beder vi om, at modul navnet skrives i loggen.

def sum(tal1: int, tal2: int) -> int:
    return tal1 + tal2
    
def main():
    logging.basicConfig(filename='minlog.log', level=logging.INFO) # Vi konfigurerer nu vores log til at skrive til filen "minlog.log", samtidig sætter vi level til 'INFO'.
    logger.info('Starter sum(5, 3)')
    res = sum(5, 3)
    logger.info(f'Returneret sum: {res}')
    
if __name__ = "__main__":
    main()
> python main.py
>

Som det ses, er der ikke nogen udskrift fra programmet. Men til gengæld er der skrevet en fil - 'minlog.log'. Hvis vi åbner denne fil, ser vi dette indhold.

INFO:__main__:Starter sum(5, 3)
INFO:__main__:Returneret sum: 8

Hvad man skal huske, er at denne log fil hele tiden vokser. D.v.s. at hvis vi kører programmet 2 gange til, ser logfilen således ud.

INFO:__main__:Starter sum(5, 3)
INFO:__main__:Returneret sum: 8
INFO:__main__:Starter sum(5, 3)
INFO:__main__:Returneret sum: 8
INFO:__main__:Starter sum(5, 3)
INFO:__main__:Returneret sum: 8

Af samme årsag, er det en god ide, også at skrive dato og tid, så man efterfølgende kan se, hvornår en evt. fejl er opstået.
Dette kan gøres således.

import logging # Importér 'logging' modulet

logger = logging.getLogger(__name__) # Opretter en log, samtidig beder vi om, at module navnet skrives i loggen.

def sum(tal1: int, tal2: int) -> int:
    return tal1 + tal2
    
def main():
    logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S', filename='minlog2.log', level=logging.INFO) # Vi omkonfigurerer nu vores log til også at skrive dato og klokkeslæt.
    logger.info('Starter sum(5, 3)')
    res = sum(5, 3)
    logger.info(f'Returneret sum: {res}')
    
if __name__ == "__main__":
    main()

Når vi kører dette program, får vi dette resultat.

> python logging2.py
>

En ny logfil - minlog2.log er skrevet, med dette indold.

03/20/2025 01:09:44 - INFO - Starter sum(5, 3)
03/20/2025 01:09:44 - INFO - Returneret sum: 8

Nu har vi lært lidt om logging.