Skip to content

Instantly share code, notes, and snippets.

@ggoboogy
Last active September 18, 2019 01:47
Show Gist options
  • Save ggoboogy/ca219fe756a9d9f6524cf00119ae6b9d to your computer and use it in GitHub Desktop.
Save ggoboogy/ca219fe756a9d9f6524cf00119ae6b9d to your computer and use it in GitHub Desktop.
Python Colored Logging with Colorlog
import logging
import colorlog
class StreamLogFormatter(logging.Formatter):
def __init__(self):
self.BASE = ("%(black)s%(bold)s%(asctime)s%(reset)s "
"%(log_color)s%(levelname)s%(reset)s")
self.DIR_NAME = "%(bold)s%(dir_name)s%(reset)s"
self.MSG = "%(log_color)s%(message)s%(reset)s"
def format(self, record):
formats = [self.BASE]
if hasattr(record, "dir_name"): formats.append(self.DIR_NAME)
formats.append(self.MSG)
formatter = colorlog.ColoredFormatter(
' '.join(formats),
log_colors={
"SUCCESS": "green,bold",
"ERROR": "red,bold",
"INFO": "cyan,bold",
"DEBUG": "white",
"WARNING": "yellow,bold",
"CRITICAL": "white,bg_red"
},
style='%'
)
return formatter.format(record)
class FileLogFormatter(logging.Formatter):
def __init__(self):
self.BASE = "%(asctime)s %(levelname)s"
self.DIR_NAME = "%(dir_name)s"
self.MSG = "%(message)s"
def format(self, record):
formats = [self.BASE]
if hasattr(record, "dir_name"): formats.append(self.DIR_NAME)
formats.append(self.MSG)
formatter = logging.Formatter(' '.join(formats))
return formatter.format(record)
def create_logger():
logging.SUCCESS = 35
logging.addLevelName(logging.SUCCESS, 'SUCCESS')
logger = colorlog.getLogger('PROJECT NAME') # TODO
logger.setLevel(logging.DEBUG)
stream_handler = colorlog.StreamHandler()
stream_handler.setFormatter(StreamLogFormatter())
logger.addHandler(stream_handler)
try: os.stat(const.LOG_PATH)
except Exception: os.mkdir(const.LOG_PATH)
log_file = datetime.datetime.strftime(datetime.datetime.now(),
os.path.join(const.LOG_PATH, "PROJECT_NAME_%Y%m%d_%H%M%S.log"))
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(FileLogFormatter())
logger.addHandler(file_handler)
setattr(logger, 'success', lambda message, extra=None:
logger.log(logging.SUCCESS, message, extra=extra))
return logger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment