Source code for OBIA4RTM.configurations.logger

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jul  5 14:11:59 2019

This module is part of OBIA4RTM.

Copyright (c) 2019 Lukas Graf

@author: Lukas Graf, graflukas@web.de
"""
import os
import logging
import logging.handlers
import OBIA4RTM


[docs]def determine_logdir(): """ searches the logging directory used for OBIA4RTM Returns ------- log_dir : String Path of logging directory """ obia4rtm_dir = os.path.dirname(OBIA4RTM.__file__) # open the OBIA4RTM_HOME file that tells where to look for the logging # diretory fname = obia4rtm_dir + os.sep + 'OBIA4RTM_HOME' with open(fname, 'r') as data: logging_dir = data.readline() try: assert logging_dir is not None and logging_dir != '' except AssertionError: raise AssertionError logging_dir = logging_dir + os.sep + 'log' # return the logging dir return logging_dir
[docs]def get_logger(logname=None): """ setups up a new logging object using Rotating File Handlers Parameters ---------- OBIA4RTM_log_dir : String directory, the log-file should be written to logname : String name of the logger (opt.); per default OBIA4RTM_Logger will be used Returns ------ logger : logging Logger Logger with stream handler for tracing OBIA4RTM's activities and errors """ # determine the logging directory of OBIA4RTM (somewhere in the user profile) OBIA4RTM_log_dir = determine_logdir() # create a new handler for the logging output fname = OBIA4RTM_log_dir + os.sep + 'OBIA4RTM.log' # use rotating file handler; a new file will be opened when the size # of the log-file exceeds 10 000 bytes logHandler = logging.handlers.RotatingFileHandler(fname, maxBytes=10000) # set the format logFormat = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") logHandler.setFormatter(logFormat) # get a new logger # set up a log file name if None was provided if logname is None: logname = 'OBIA4RTM_Logger' logger = logging.getLogger(logname) # set logging level to DEBUG logger.setLevel(level=logging.DEBUG) # add the handler to the logger logger.addHandler(logHandler) # return the logger to the calling module return logger
[docs]def close_logger(logger): """ close a logger after program shut-down and releases the handlers Parameters ---------- logger : logging Object logger of OBIA4RTM 'OBIA4RTM_logger' """ # get the handlers and close them one by one handlers = logger.handlers[:] for handler in handlers: handler.close() logger.removeHandler(handler)