2016-05-05 13 views
0

======================== 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

Antwort

0

Sie wissen, dass, wenn die Arbeiter laufen Sie die Logdatei über Argument wie folgt angeben:

celery -A proj worker -l info -f paht/to/yourfile.log 

Mehr zu den official doc

+0

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

+0

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. –

+0

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