1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- """celery.log"""
- import os
- import sys
- import time
- import logging
- from celery.conf import LOG_FORMAT, DAEMON_LOG_LEVEL
- def setup_logger(loglevel=DAEMON_LOG_LEVEL, logfile=None, format=LOG_FORMAT,
- **kwargs):
- """Setup the ``multiprocessing`` logger. If ``logfile`` is not specified,
- ``stderr`` is used.
- Returns logger object.
- """
- import multiprocessing
- logger = multiprocessing.get_logger()
- for handler in logger.handlers:
- if hasattr(handler, "close"):
- handler.close()
- logger.handlers = []
- if logfile:
- if hasattr(logfile, "write"):
- log_file_handler = logging.StreamHandler(logfile)
- else:
- log_file_handler = logging.FileHandler(logfile)
- formatter = logging.Formatter(format)
- log_file_handler.setFormatter(formatter)
- logger.addHandler(log_file_handler)
- else:
- multiprocessing.log_to_stderr()
- logger.setLevel(loglevel)
- return logger
- def emergency_error(logfile, message):
- """Emergency error logging, for when there's no standard file
- descriptors open because the process has been daemonized or for
- some other reason."""
- logfh_needs_to_close = False
- if not logfile:
- logfile = sys.stderr
- if hasattr(logfile, "write"):
- logfh = logfile
- else:
- logfh = open(logfile, "a")
- logfh_needs_to_close = True
- logfh.write("[%(asctime)s: FATAL/%(pid)d]: %(message)s\n" % {
- "asctime": time.asctime(),
- "pid": os.getpid(),
- "message": message})
- if logfh_needs_to_close:
- logfh.close()
|