Celery itself replaces the (global) logator class using the logging.setLoggerClass method, with the ProcessAwareLogger class that performs a couple of things: do not try to write to the signal handler and add the process name to the logs. This happens as soon as the celery registration system is configured. You see this class even on your own registrars due to the global nature of setLoggerClass .
As to why celery is designed this way, I think you will need to ask the celery developer, but this effectively allows the celery to ensure that the signal processor security and process name are taken care of even if you use your own registrars in your application.
Python logging notes:
If you use asynchronous signal handlers using a signal module, you will not be able to use a record from such handlers. This is because blocking implementations in the streaming module are not always returned and therefore cannot be called from such signal handlers.
Celery uses signal , so this may be the reason that you want to globally apply its log class.
source share