# Copyright (C) 2015 ACSONE SA/NV # Part of this file come from the Acsone git-aggregator project # https://github.com/acsone/git-aggregator # Copyright (C) 2019 - Today: GRAP (http://www.grap.coop) # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from colorama import Fore, Style import time import logging logger = logging.getLogger(__name__) LEVEL_COLORS = { 'DEBUG': Fore.BLUE, 'INFO': Fore.GREEN, 'WARNING': Fore.YELLOW, 'ERROR': Fore.RED, 'CRITICAL': Fore.RED } def setup_logger(level, file_path=False): if not file_path: handler = logging.StreamHandler() handler.setFormatter(OdooMigrateFormatter()) else: handler = logging.FileHandler(file_path) handler.setFormatter(logging.Formatter( "%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s")) logger.addHandler(handler) logger.setLevel(getattr(logging, str(level))) class OdooMigrateFormatter(logging.Formatter): def format(self, record): """Overwrite format() function to use custom formatter""" record.message = record.getMessage() record.asctime = time.strftime( '%H:%M:%S', self.converter(record.created) ) prefix = self.default_prefix_template(record) % record.__dict__ return (prefix + " " + record.message).replace( "\n", "\n" + "".ljust(23, " ")) def default_prefix_template(self, record): """Return the prefix for the log message. Template for Formatter. :param: record: :py:class:`logging.LogRecord` object. this is passed in from inside the :py:meth:`logging.Formatter.format` record. """ reset = [Style.RESET_ALL] levelname = [ LEVEL_COLORS.get(record.levelname), Style.BRIGHT, '%(levelname)-10s', Style.RESET_ALL, ' ' ] asctime = [ '', Fore.BLACK, Style.DIM, Style.BRIGHT, '%(asctime)-10s', Fore.RESET, Style.RESET_ALL, ' ' ] return "".join(reset + asctime + levelname + reset)