12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # -*- coding: utf-8 -*-
- """
- celery.utils.patch
- ~~~~~~~~~~~~~~~~~~
- Monkey-patch to ensure loggers are process aware.
- :copyright: (c) 2009 - 2011 by Ask Solem.
- :license: BSD, see LICENSE for more details.
- """
- from __future__ import absolute_import
- import logging
- _process_aware = False
- def _patch_logger_class():
- """Make sure process name is recorded when loggers are used."""
- try:
- from multiprocessing.process import current_process
- except ImportError:
- current_process = None # noqa
- logging._acquireLock()
- try:
- OldLoggerClass = logging.getLoggerClass()
- if not getattr(OldLoggerClass, '_process_aware', False):
- class ProcessAwareLogger(OldLoggerClass):
- _process_aware = True
- def makeRecord(self, *args, **kwds):
- record = OldLoggerClass.makeRecord(self, *args, **kwds)
- if current_process:
- record.processName = current_process()._name
- else:
- record.processName = ""
- return record
- logging.setLoggerClass(ProcessAwareLogger)
- finally:
- logging._releaseLock()
- def ensure_process_aware_logger():
- global _process_aware
- if not _process_aware:
- _patch_logger_class()
- _process_aware = True
|