Wie verhindere ich doppelte Sellerie-Protokolle in einer Anwendung wie diesem?verhindern doppelte Sellerie Protokollierung
# test.py
from celery import Celery
import logging
app = Celery('tasks', broker='redis://localhost:6379/0')
app.logger = logging.getLogger("new_logger")
file_handler = logging.handlers.RotatingFileHandler("app.log", maxBytes=1024*1024, backupCount=1)
file_handler.setFormatter(logging.Formatter('custom_format %(message)s'))
app.logger.addHandler(file_handler)
@app.task
def foo(x, y):
app.logger.info("log info from foo")
beginne ich die Anwendung mit: celery -A test worker --loglevel=info --logfile celery.log
Dann verursachen ich foo mit python -c "from test import foo; print foo.delay(4, 4)"
ausgeführt werden Dies führt zu der "log info von foo" sowohl celery.log
und app.log
in angezeigt wird. Hier
app.log ist Inhalt:
custom_format log info from foo
Und hier ist celery.log Inhalt:
[2017-07-26 21:17:24,962: INFO/MainProcess] Connected to redis://localhost:6379/0
[2017-07-26 21:17:24,967: INFO/MainProcess] mingle: searching for neighbors
[2017-07-26 21:17:25,979: INFO/MainProcess] mingle: all alone
[2017-07-26 21:17:25,991: INFO/MainProcess] [email protected] ready.
[2017-07-26 21:17:38,224: INFO/MainProcess] Received task: test.foo[e2c5e6aa-0d2d-4a16-978c-388a5e3cf162]
[2017-07-26 21:17:38,225: INFO/ForkPoolWorker-4] log info from foo
[2017-07-26 21:17:38,226: INFO/ForkPoolWorker-4] Task test.foo[e2c5e6aa-0d2d-4a16-978c-388a5e3cf162] succeeded in 0.000783085000876s: None
Ich hielt die benutzerdefinierte Logger-Handler aus dem Python-Code zu entfernen, aber ich weiß nicht möchte nur sellery.log verwenden, da es keine rotierenden Dateien unterstützt. Ich erwog, Sellerie mit --logfile /dev/null
zu starten, aber dann würde ich die Vermischung und andere Protokolle verlieren, die nicht in app.log
angezeigt werden.
Kann ich verhindern, dass "log info from foo" in celery.log
angezeigt wird? Vorausgesetzt, dass ich den Logger von Grund auf neu erstellt und nur die Protokollierung auf app.log
eingerichtet habe, warum wird "log info from foo" in celery.log
angezeigt?
Ist es möglich, die Sellerie MainProcess und Worker-Protokolle (zum Beispiel Connected to redis://localhost:6379/0
) durch einen RotatingFileHandler angemeldet sein, zu erhalten (zum Beispiel in meinem app.log
gehen)?