Skip to content

Instantly share code, notes, and snippets.

@simonrad
Last active December 20, 2015 10:39
Show Gist options
  • Select an option

  • Save simonrad/6117361 to your computer and use it in GitHub Desktop.

Select an option

Save simonrad/6117361 to your computer and use it in GitHub Desktop.
Snippet to setup basic logging in Python.
import logging
import os
import sys
import time
LOG_FORMAT = '%(asctime)s %(levelname)-8s %(message)s'
DATE_FORMAT = '%m/%d %H:%M:%S %Z'
# --------------------------------------------------
def cwd_filepath(filename):
return os.path.join(os.getcwd(), filename)
def setup_basic_logging(log_filepath, log_level=logging.INFO):
sys.stdout = sys.stderr = open(log_filepath, 'a')
os.environ['TZ'] = 'US/Pacific'
time.tzset()
logging.basicConfig(level=log_level,
format=LOG_FORMAT,
datefmt=DATE_FORMAT,
)
# Example usage:
# setup_basic_logging(cwd_filepath('my_app_log.txt'))
# --------------------------------------------------
class BelowLevelFilter(logging.Filter):
def __init__(self, level):
super(BelowLevelFilter, self).__init__()
self.level = level
def filter(self, record):
return record.levelno < self.level
def setup_split_logging(log_level=logging.DEBUG, stderr_level=logging.WARNING):
""" Makes it log to stdout if level < stderr_level, stderr if level >= stderr_level. """
os.environ['TZ'] = 'US/Pacific'
time.tzset()
logger = logging.getLogger() # The root logger.
logger.setLevel(log_level)
formatter = logging.Formatter(fmt=LOG_FORMAT, datefmt=DATE_FORMAT)
h1 = logging.StreamHandler(sys.stdout)
h1.setLevel(logging.DEBUG)
h1.setFormatter(formatter)
h1.addFilter(BelowLevelFilter(stderr_level))
h2 = logging.StreamHandler(sys.stderr)
h2.setLevel(stderr_level)
h2.setFormatter(formatter)
logger.addHandler(h1)
logger.addHandler(h2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment