Skip to content

Instantly share code, notes, and snippets.

@dmitryhd
Last active August 23, 2016 13:10
Show Gist options
  • Select an option

  • Save dmitryhd/98aa1004563409c44d71cb32fa48437d to your computer and use it in GitHub Desktop.

Select an option

Save dmitryhd/98aa1004563409c44d71cb32fa48437d to your computer and use it in GitHub Desktop.
import logging
import logging.handlers
import os.path as path
LOG_FORMAT = '[%(asctime)s] %(levelname)s %(message)s'
TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
LOG_DEFAULT_LEVEL = logging.DEBUG
def get_formatter():
try:
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
'%(white)s[%(asctime)s]%(reset)s %(log_color)s%(levelname)-6s%(reset)s %(message)s',
datefmt=TIME_FORMAT,
reset=True,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
style='%'
)
except ImportError:
formatter = logging.Formatter(LOG_FORMAT, TIME_FORMAT)
return formatter
def get_stream_handler():
try:
import colorlog
handler = colorlog.StreamHandler()
except ImportError:
handler = logging.StreamHandler()
handler.setFormatter(get_formatter())
return handler
def add_file_handler(logger, filename, level):
file_handler = logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=10**8, backupCount=1)
file_handler.setLevel(level)
file_handler.setFormatter(get_formatter())
logger.addHandler(file_handler)
def configure_logger(logger_name='root', log_dir='/tmp/', silent=True, level=LOG_DEFAULT_LEVEL):
"""
Returns logger which output to stdout and and to specified file.
Example: logger = configure_logger('just_log')
will output log with timestamps to /var/local/log/just_log.log
"""
filename = logger_name + '.log'
log_location = path.join(log_dir, filename)
logger = logging.getLogger(logger_name)
logger.setLevel(level)
logger.handlers = []
# Stdout
stdout = get_stream_handler()
stdout.setLevel(level)
logger.addHandler(stdout)
# Filehandler
add_file_handler(logger, log_location, level)
if not silent:
print('Log to file {}'.format(log_location))
logger.propagate = False
return logger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment