Source code for fmflow.logging
# coding: utf-8
__all__ = [
"logger",
"setlogger",
]
# standard library
import logging
from copy import copy
from pathlib import Path
# dependent packages
import fmflow as fm
# module constants
DATEFORMAT = "%Y-%m-%d %H:%M:%S"
LOGFORMAT = "{asctime} | {levelname:8} | {name}: {message}"
DEFAULTLEVEL = "INFO"
# default logger
logger = logging.getLogger("fmflow")
logger.addHandler(logging.NullHandler())
logger.propagate = False
# classes
[docs]class setlogger(object):
def __init__(self, level=None, filename=None, overwrite=False, encoding="utf-8"):
self.oldhandlers = copy(fm.logger.handlers)
self.oldlevel = copy(fm.logger.level)
self.sethandlers(filename, overwrite, encoding)
self.setlevel(level)
[docs] @staticmethod
def sethandlers(filename, overwrite, encoding):
for handler in fm.logger.handlers:
fm.logger.removeHandler(handler)
if filename is None:
handler = logging.StreamHandler()
else:
filename = str(Path(filename).expanduser())
mode = "w" if overwrite else "a"
handler = logging.FileHandler(filename, mode, encoding)
formatter = logging.Formatter(LOGFORMAT, DATEFORMAT, style="{")
handler.setFormatter(formatter)
fm.logger.addHandler(handler)
[docs] @staticmethod
def setlevel(level):
level = DEFAULTLEVEL if level is None else level.upper()
fm.logger.setLevel(level)
for handler in fm.logger.handlers:
handler.setLevel(level)
def __enter__(self):
pass
def __exit__(self, exc_type, exc_value, traceback):
fm.logger.handlers = self.oldhandlers
fm.logger.level = self.oldlevel