| 85 | ) |
| 86 | |
| 87 | def setup_logging_subsystem(self, loglevel=None, logfile=None, format=None, |
| 88 | colorize=None, hostname=None, **kwargs): |
| 89 | if self.already_setup: |
| 90 | return |
| 91 | if logfile and hostname: |
| 92 | logfile = node_format(logfile, hostname) |
| 93 | Logging._setup = True |
| 94 | loglevel = mlevel(loglevel or self.loglevel) |
| 95 | format = format or self.format |
| 96 | colorize = self.supports_color(colorize, logfile) |
| 97 | reset_multiprocessing_logger() |
| 98 | receivers = signals.setup_logging.send( |
| 99 | sender=None, loglevel=loglevel, logfile=logfile, |
| 100 | format=format, colorize=colorize, |
| 101 | ) |
| 102 | |
| 103 | if not receivers: |
| 104 | root = logging.getLogger() |
| 105 | |
| 106 | if self.app.conf.worker_hijack_root_logger: |
| 107 | root.handlers = [] |
| 108 | get_logger('celery').handlers = [] |
| 109 | get_logger('celery.task').handlers = [] |
| 110 | get_logger('celery.redirected').handlers = [] |
| 111 | |
| 112 | # Configure root logger |
| 113 | self._configure_logger( |
| 114 | root, logfile, loglevel, format, colorize, **kwargs |
| 115 | ) |
| 116 | |
| 117 | # Configure the multiprocessing logger |
| 118 | self._configure_logger( |
| 119 | get_multiprocessing_logger(), |
| 120 | logfile, loglevel if MP_LOG else logging.ERROR, |
| 121 | format, colorize, **kwargs |
| 122 | ) |
| 123 | |
| 124 | signals.after_setup_logger.send( |
| 125 | sender=None, logger=root, |
| 126 | loglevel=loglevel, logfile=logfile, |
| 127 | format=format, colorize=colorize, |
| 128 | ) |
| 129 | |
| 130 | # then setup the root task logger. |
| 131 | self.setup_task_loggers(loglevel, logfile, colorize=colorize) |
| 132 | |
| 133 | try: |
| 134 | stream = logging.getLogger().handlers[0].stream |
| 135 | except (AttributeError, IndexError): |
| 136 | pass |
| 137 | else: |
| 138 | set_default_encoding_file(stream) |
| 139 | |
| 140 | # This is a hack for multiprocessing's fork+exec, so that |
| 141 | # logging before Process.run works. |
| 142 | logfile_name = logfile if isinstance(logfile, str) else '' |
| 143 | os.environ.update(_MP_FORK_LOGLEVEL_=str(loglevel), |
| 144 | _MP_FORK_LOGFILE_=logfile_name, |