2017-04-05 12 views
0

私のワーカーとキューを追跡する最良の方法を探しています。ロギングを検討しています。python /セロリ/ rabbitMQ

私は次のようにロギングを設定することを提案するcelery documentationの例で見てきました:ログファイルが行くん

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

を?また、ログファイルにはどのような情報が格納されていますか?それは単にlogger.info関数に含まれる情報ですか?

ログファイルには、ワーカーから返された結果が格納されますか、それとも別のものですか?

答えて

2

ロギングファイルはどこにありますか?

私が見る通り、FileHandlersはありません。コンソールへのロガー書き込みメッセージを意味します。

これを確認してください。ここで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) 
    }, 
} 

セロリ(celery worker -A tasks.app --loglevel=info --beat)を実行し、コンソールを確認します。

[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 

これは、ロガーがうまく動作し、メッセージを書き込むことを意味します。

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) 

実行セロリとtasks.py保存場所のフォルダを確認してください。今度は、私たちの仕事のためにFileHandlerを追加してみましょう。新しいファイル(tasks.log)が表示されます。コンテンツの例:

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

は、ログファイルは、労働者によって返された結果を格納していますか?

デフォルトでは、情報はコンソールに印刷されます。しかし、signals、カスタムTask/Loaderクラスを使用して、特定のロガー、ハンドラーを登録し、動作をカスタマイズすることができます。

Celeryを実行すると、-f LOGFILE, --logfile=LOGFILE引数を設定することもできます。

これが役に立ちます。

関連する問題