Freitag, 12. Oktober 2018

Set up logging

A simple logger using the logging module. TODO: Convert code into a method returning a logger object providing the method to unregister/remove and close the file handler (see the other post).
Please be aware that copy and paste of the code below will most probably lead to indention error, as the code was more or less just a copy of respective passages in real code.
from datetime import datetime
import logging
from logging.handlers import RotatingFileHandler
from pathlib import Path

    scriptPathParts = Path(__file__).resolve().parts
    logDirectoryName = 'logs'
    scriptDirectory = Path(__file__).parent.resolve()
    logDirectory = scriptDirectory.joinpath(logDirectoryName)
    logDirectoryCreated = False
    if not logDirectory.is_dir():
        logDirectory.mkdir(parents = True, exist_ok = True)
        logDirectoryCreated = True
    startTimestamp = datetime.now().strftime("%Y%m%d%H%M%S")
    logger = logging.getLogger('deploy')
    logLevel = 'INFO'
    logger.setLevel(logLevel)
    formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logHandlerStream = logging.StreamHandler()
    logHandlerStream.setFormatter(formatter)
    logger.addHandler(logHandlerStream)
    logFileName = scriptPathParts[-1].replace('.py', '')
    # for debugging it is easier if the log file name stays the same
    if (not logger.isEnabledFor(logging.DEBUG)):
        logFileName = logFileName + '_' + startTimestamp
    logFileName = logFileName + '.log'
    logFile = logDirectory.joinpath(logFileName)
    # FIXME for some unknown reason to me the mode does not get respected, the log
    # file is appended. Maybe this is a "feature" of Windoof.
    logHandlerFile = RotatingFileHandler(
            filename = str(logFile),
            mode = 'w',
            maxBytes = 10485760,
            backupCount = 10,
            encoding = 'utf-8',
            delay = True)
    logHandlerFile.setFormatter(formatter)
    logger.addHandler(logHandlerFile)

Keine Kommentare:

Kommentar veröffentlichen