Skip to content

Instantly share code, notes, and snippets.

@messa
Last active August 18, 2016 16:13
Show Gist options
  • Save messa/bd0ed0a80415e5276d0e432c5a0c7fe4 to your computer and use it in GitHub Desktop.
Save messa/bd0ed0a80415e5276d0e432c5a0c7fe4 to your computer and use it in GitHub Desktop.
Python multiprocess logging
from contextlib import contextmanager
import multiprocessing
def main():
multiprocessing.current_process().name = 'master'
mgr = multiprocessing.Manager()
with setup_logging(mgr):
pass # do cool stuff here
@contextmanager
def setup_logging(manager, verbose=True):
import logging
from logging.handlers import QueueHandler, QueueListener
fmt = '%(asctime)s [%(process)2d:%(processName)-11s] %(name)s %(levelname)5s: %(message)s'
class CustomQueueHandler (QueueHandler):
def enqueue(self, record):
self.queue.put(record)
logging_queue = manager.Queue()
logging.getLogger('').setLevel(logging.DEBUG)
qh = CustomQueueHandler(logging_queue)
logging.getLogger('').addHandler(qh)
handlers = []
h = logging.StreamHandler()
h.setLevel(logging.DEBUG if verbose else logging.INFO)
h.setFormatter(logging.Formatter(fmt))
handlers.append(h)
# Create FileHandler here and append it to handlers if needed
ql = QueueListener(logging_queue, *handlers)
ql.start()
try:
yield
finally:
ql.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment