Przeglądaj źródła

Somehow celery.utils.patch was merged out

Ask Solem 13 lat temu
rodzic
commit
2933cdbf71
1 zmienionych plików z 52 dodań i 0 usunięć
  1. 52 0
      celery/utils/patch.py

+ 52 - 0
celery/utils/patch.py

@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+"""
+    celery.utils.patch
+    ~~~~~~~~~~~~~~~~~~
+
+    Monkey-patch to ensure loggers are process aware.
+
+    :copyright: (c) 2009 - 2012 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