1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import os import logging import uuid from logging import Handler, FileHandler, StreamHandler
class PathFileHandler(FileHandler): def __init__(self, path, filename, mode = 'a', encoding = None, delay = False): filename = os.fspath(filename) if not os.path.exists(path): os.mkdir(path) self.baseFilename = os.path.join(path, filename) self.mode = mode self.encoding = encoding self.delay =delay if delay: Handler.__init__(self) self.stream = None else: StreamHandler.__init__(self, self._open())
class Loggers(): level_relations = { 'debug' : logging.DEBUG, 'info' : logging.INFO, 'warning' : logging.WARNING, 'error' : logging.ERROR, 'critical' : logging.CRITICAL } uid = uuid.uuid4() def __init__(self, filename = f'{uid}.log', level = 'info', log_dir = 'log', fmt = "[%(asctime)s] [%(levelname)8s] %(message)s" ): self.logger =logging.getLogger(filename) abspath = os.path.dirname(os.path.abspath(__file__)) self.directory = os.path.join(abspath, log_dir) format_str = logging.Formatter(fmt) self.logger.setLevel(self.level_relations.get(level)) stream_handler = logging.StreamHandler() stream_handler.setFormatter(format_str) file_handler = PathFileHandler(path=self.directory, filename=filename, mode='a') file_handler.setFormatter(format_str) self.logger.addHandler(stream_handler) self.logger.addHandler(file_handler)
if __name__ == '__main__': text = 'hahaha' log = Loggers(level='debug') log.logger.info(4) log.logger.info(5) log.logger.info(text)
|