Skip to content

Instantly share code, notes, and snippets.

@headsrooms
Created July 24, 2017 18:23
Show Gist options
  • Save headsrooms/0e8d8c68c9d5eb9723da998760b9872c to your computer and use it in GitHub Desktop.
Save headsrooms/0e8d8c68c9d5eb9723da998760b9872c to your computer and use it in GitHub Desktop.
Python logger as a context manager
import logging
from logger import log_level
def message(self, message):
with log_level(logging.INFO, __name__) as logger:
input_args = [EXECUTABLE_NAME, SEND_COMMAND]
try:
process = subprocess.Popen(input_args,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.STDOUT)
sleep(3)
process.stdin.write(bytes(message + '\n', 'utf-8'))
process.stdin.flush()
except subprocess.CalledProcessError as e:
logger.error("Error while sending")
logger.debug(e)
import logging
from contextlib import contextmanager
LOG_FILENAME = "app.log"
@contextmanager
def log_level(level, name, handler=None):
logging.basicConfig()
logger = logging.getLogger(name)
if logger.hasHandlers(): # remove all previous handlers. Without this -> duplicated logs and without format
logger.handlers.clear()
if handler is not None:
logger.addHandler(handler)
else:
logger.addHandler(logging.FileHandler(LOG_FILENAME))
formatter = logging.Formatter(fmt='%(asctime)s: %(message)s', datefmt='%I:%M:%S')
logger.handlers[0].setFormatter(formatter)
old_level = logger.getEffectiveLevel()
logger.setLevel(level)
logger.propagate = True
try:
yield logger
finally:
logger.setLevel(old_level)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment