======================== LAST UPDATE ============= ============
fand ich Sellerie Signal worker_process_init.connect (some_function)
, die mir erlauben, jede Funktion, die ich vor dem Arbeiter Kind anfangen zu laufen, und in meinem Fall ausgeführt werden soll ich kann die Handler-Protokolle ändern, wie ich will ...Django Sellerie Change-Log-Datei auf der Laufzeit
handler = logging.FileHandler(('my%s.log')%current_process().index, 'a')
logger.addHandler(handler)
(ein weiteres Signal, dass ich setup_log found- war nicht effizient in meinem Fall.)
+++++++++++++ +++++ ++++++++ UPDATE ++++++++++++++++++++++++++
zog ich die handlet aus meinem settings.py da ich verstand es nur einmal, so jetzt ist definiert, in task.py geladen:
def custom_logger(name):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(('my%s.log')%current_process().index, 'a')
logger.addHandler(handler)
return logger
und Aufgabe zum Beispiel:
@tenant_celery.task(base=HandlersImplTenantTask)
@concurrent_task(task_timeout=1)
def add():
task_id = add.request.id
l = custom_logger(task_id)
l.info("task name is - ADD")
l.info("my worker id is: %s" % current_process().index)
return 5+7
nicht die ästhetischen Lösung, aber es funktioniert Werk Ändern von Protokolldateien auf Laufzeit ..
========================================= ================ =====
Ich bin mit Sellerie Aufgabe über Django,
ich jeden Sellerie Arbeiter in eine andere Protokolldatei schreiben möchten,
aber auf die gleiche jedes Mal ->
zum Beispiel: Arbeiter 1 -> myLog1.log, Arbeiter 2 -> myLog2.log
dies ist, wie mein settings.py aussieht:
logfile = '%s/%s' % (logdir, APP_NAME + "-" + process_name + '.log')
CELERY_WORKER_LOGFILE = '%s/%s' % (logdir, 'celery_worker.log')
und task.py:
@tenant_celery.task(base=HandlersImplTenantTask)
def get_worker_id():
logdir = '%s/%s' % (os.curdir, 'log')
settings.CELERY_WORKER_LOGFILE = '%s/%s-%s.log' % (logdir, 'celery_worker', current_process().index)
print settings.CELERY_WORKER_LOGFILE
# print the new log file
logger.info("HELLO FROM TASK %s", current_process().index)
# write to the wrong logfile.
und das gleiche gilt für die zweite Aufgabe, die ich habe.
aber obwohl es einen anderen „LOFFILE“ jede Aufgabe drucken,
es hält auf das gleiche Protokoll schreiben (!!) als in settings.py erscheinen.
mein Fahrbefehl:
celery worker -c 2 --broker=amqp://1000:[email protected]:5672//1000
ist es eine Möglichkeit, (wirklich) während der Laufzeit der Protokolldatei ändern ??
(ich konnte nicht verstehen, wenn Django log signals mir helfen kann)
Ich fand auch THIS Antwort, aber es für mich nicht funktioniert ..
dank
Dank für Ihre Antwort, aber weil ich die Arbeit mit multy - process ist es problematisch den laufenden Befehl zu ändern. oder verpasse ich etwas? Danke, – amichib
Sie meinen, dass Sie Sellerie Multi verwenden? Oder das init.d-Skript? In beiden Fällen können Sie Optionen für jeden Worker angeben. –
Ich meine, dass ich diesen Befehl benutze: Sellerie Arbeiter -c 5 - Broker = amqp: // 1000: 1000 @ localhost: 5672 // 1000.
so kann ich nicht jedes Mal die Protokolldatei konfigurieren. Liege ich falsch? – amichib