2017-04-05 2 views
0

Ich bin auf der Suche nach dem besten Weg, um meine Mitarbeiter und Warteschlangen zu verfolgen, und ich bin in der Protokollierung suchen.Protokollierung mit Python/Sellerie/KaninchenMQ

Ich habe Beispiele in der celery documentation gesehen, dass die Protokollierung der Einrichtung schlägt wie folgt:

from celery.utils.log import get_task_logger 
 

 
logger = get_task_logger(__name__) 
 

 
@app.task 
 
def add(x, y): 
 
    logger.info('Adding {0} + {1}'.format(x, y)) 
 
    return x + y

Wohin geht die Logging-Datei? Welche Informationen werden in der Protokolldatei gespeichert? Sind es nur Informationen, die in der Funktion logger.info enthalten sind?

Werden in der Protokolldatei die von den Arbeitern zurückgegebenen Ergebnisse gespeichert oder ist das separat?

Antwort

2

Wohin geht die Logging-Datei?

Wie ich sehen kann, haben Sie keine FileHandlers. Es bedeutet, Logger schreiben Nachrichten an die Konsole.

Lassen Sie es uns überprüfen. Hier Beispiel tasks.py:

# celery 4.0.2 
@celery.task(name='add') 
def add(x, y): 
    logger.info('Adding {0} + {1}'.format(x, y)) 
    return x + y 


app = celery.Celery(
    __name__, 
    broker='redis://localhost:6379/0', 
    backend='redis://localhost:6379/0', 
) 

app.conf.beat_schedule = { 
    # run task each 2 seconds 
    'add-every-2-seconds': { 
     'task': 'add', 
     'schedule': 2.0, 
     'args': (1, 2) 
    }, 
} 

Run Sellerie (celery worker -A tasks.app --loglevel=info --beat) und Konsole überprüfen. Sie werden so etwas sehen:

[2017-04-08 18:18:55,924: INFO/Beat] Scheduler: Sending due task add-every-2-seconds (add) 
[2017-04-08 18:18:55,930: INFO/MainProcess] Received task: add[44a6877c-84a2-4a26-815e-1f637fdf9c0c] 
[2017-04-08 18:18:55,932: INFO/PoolWorker-2] add[44a6877c-84a2-4a26-815e-1f637fdf9c0c]: Adding 1 + 2 
[2017-04-08 18:18:55,934: INFO/PoolWorker-2] Task add[44a6877c-84a2-4a26-815e-1f637fdf9c0c] succeeded in 0.00191404699945s: 3 
[2017-04-08 18:18:57,924: INFO/Beat] Scheduler: Sending due task add-every-2-seconds (add) 
[2017-04-08 18:18:57,928: INFO/MainProcess] Received task: add[c386d360-57d3-4352-8a89-f86bb2376e4e] 
[2017-04-08 18:18:57,930: INFO/PoolWorker-3] add[c386d360-57d3-4352-8a89-f86bb2376e4e]: Adding 1 + 2 
[2017-04-08 18:18:57,931: INFO/PoolWorker-3] Task add[c386d360-57d3-4352-8a89-f86bb2376e4e] succeeded in 0.00146738500007s: 3 

Es bedeutet Logger funktioniert gut und schreiben Sie unsere Nachrichten. Nun wollen wir versuchen FileHandler für unsere Aufgaben hinzuzufügen:

logger = get_task_logger(__name__) 
task_handler = FileHandler('task.log') 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 

task_handler.setFormatter(formatter) 
logger.addHandler(task_handler) 

Run Sellerie und Ordner überprüfen, wo tasks.py gespeichert. Sie sollten eine neue Datei sehen (tasks.log). Beispiel für den Inhalt:

2017-04-08 18:35:02,052 - tasks - INFO - Adding 1 + 2 
... 

Speichert die Logdatei, die von den Arbeitern zurückgegebenen Ergebnisse?

Standardmäßig werden nur Informationen zur Konsole gedruckt. Sie können jedoch spezifische Protokollierer und Handler registrieren und das Verhalten anpassen, indem Sie signals, eine benutzerdefinierte Task/Loader-Klasse, verwenden.

Sie können auch -f LOGFILE, --logfile=LOGFILE Argument beim Lauf Celery.

Hoffe, das hilft.

Verwandte Themen