Die sellery 3.x Dokumentation zum Logging empfiehlt, den Task Logger einzurichten so:
%Vor% Wenn ich das tue, wird CELERYD_TASK_LOG_FORMAT
ignoriert und die Protokollanweisungen verwenden stattdessen CELERYD_LOG_FORMAT
, wo ich %(task_name)s
und %(task_id)s
nicht verwenden kann.
Meine Aufgabe befindet sich in einem Modul tasks
in meiner App myapp
. Daher ist __name__
myapp.tasks
.
Ich vermute das Problem sind diese Zeilen in celery/utils/log.py
:
Aus irgendeinem Grund muss das an get_task_logger()
übergebene Modul ein Modul der ersten Ebene sein, andernfalls ist der Task-Logger nicht angehängt. Es gibt keinen Kommentar, der erklärt, warum dies der Fall sein muss (und ich kann mir keinen Grund vorstellen, warum Sie diese Einschränkung wirklich hinzufügen würden). __name__
funktioniert nicht, da es auf ein Modul der zweiten Ebene verweist.
Mache ich einen Fehler oder sind die Dokumente einfach falsch? Wenn ja, was soll ich stattdessen an get_task_logger()
weitergeben?
Ab 2014-10-05 ist dies nicht mehr der Fall. Die Weitergabe von __name__
scheint nun gut zu funktionieren ( aktuelle Implementierung ).
Denken Sie daran, dass Ihre Task-Logger weiterhin von celery.task
erben müssen. Der übergeordnete Logger celery
wird standardmäßig nicht an den Root-Logger weitergegeben. Daher sollten Sie in Ihrer Logging-Konfiguration einen Logger für celery.task
definieren.