Skip to content

Instantly share code, notes, and snippets.

@ald2004
Created May 14, 2025 08:47
Show Gist options
  • Select an option

  • Save ald2004/2f05d646a88bb94d9a921ea6517dc41e to your computer and use it in GitHub Desktop.

Select an option

Save ald2004/2f05d646a88bb94d9a921ea6517dc41e to your computer and use it in GitHub Desktop.
import logging
from logging.handlers import TimedRotatingFileHandler
import inspect
import functools
from termcolor import colored
_logger_instance = {}
class _ColorfulFormatter(logging.Formatter):
def __init__(self, *args, **kwargs):
self._root_name = kwargs.pop("root_name") + "."
self._abbrev_name = kwargs.pop("abbrev_name", "")
if len(self._abbrev_name):
self._abbrev_name = self._abbrev_name + "."
super(_ColorfulFormatter, self).__init__(*args, **kwargs)
def formatMessage(self, record):
record.name = record.name.replace(self._root_name, self._abbrev_name)
log = super(_ColorfulFormatter, self).formatMessage(record)
if record.levelno == logging.WARNING:
prefix = colored("WARNING", "red", attrs=["blink"])
elif record.levelno == logging.ERROR or record.levelno == logging.CRITICAL:
prefix = colored("ERROR", "red", attrs=["blink", "underline"])
else:
return log
return prefix + " " + log
@functools.lru_cache()
def setup_logger(logname='crkapp'):
if logname in _logger_instance:
return _logger_instance[logname]
frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0])
name = mod.__name__ if mod else '__main__'
logger = logging.getLogger(name)
if logger.handlers:
_logger_instance[logname] = logger
return logger
logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
# console_formatter = logging.Formatter(
# "[%(asctime)s] %(name)s %(module)s %(lineno)d: %(message)s", datefmt="%m/%d %H:%M:%S"
# )
formatter = _ColorfulFormatter(
colored("[%(asctime)s %(filename)s %(module)s %(lineno)d]: ", "green") + "%(message)s",
datefmt="%m/%d %H:%M:%S",
root_name=name,
abbrev_name=str(name),
)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
file_handler = TimedRotatingFileHandler(
filename=f"/dev/shm/adclogs/{logname}.log",
when="midnight",
interval=1,
backupCount=7,
encoding="utf-8",
)
# file_formatter = logging.Formatter(
# '%(asctime)s - %(name)s:%(lineno)d - %(message)s'
# )
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
_logger_instance[logname] = logger
return logger
logger = setup_logger()
# logger.info("System started")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment