2016-05-05 5 views
0

============= ============
私は労働者子供が実行を開始し、私の場合には前に、私は私が望むすべての機能を実行できるようにセロリ信号worker_process_init.connect(some_function)
を見つけました私が好きな私は
(私はsetup_logをfound-別の信号が私の場合には効率的ではありませんでした。)...ジャンゴセロリ変更ログファイル======================== LAST UPDATE

handler = logging.FileHandler(('my%s.log')%current_process().index, 'a') 
logger.addHandler(handler) 

をログ・ハンドラを変更することができます+++++++++++++ +++++ ++++++++ UPDATE ++++++++++++++++++++++++++
私は私ので、私のsettings.pyの外にhandletを移動

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 

例えばタスク:

@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 

ない最も審美的な解決策が、 は、ログファイルを変更するワーク・それがないので、今それがtask.pyで定義されている、それは一度だけロード理解実行時..に

========================================= ================ =====私はすべてのセロリの労働者が別のログファイルに書き込みたい

私はDjangoのオーバーセロリのタスクを実行している、

が、毎回同じものに

- >

例えば

:労働者1 - > myLog1.log、作業員2 - > myLog2.log

これは私のsettings.pyがどのように見えるかです:

logfile = '%s/%s' % (logdir, APP_NAME + "-" + process_name + '.log') 
CELERY_WORKER_LOGFILE = '%s/%s' % (logdir, 'celery_worker.log') 

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

と私が持っている2番目のタスクのために同じ。

が、それはそのsettings.pyに表示される異なる「LOFFILE」すべてのタスク、

それは同じログへの書き込みを続けます(!!)の印刷が。

私の実行コマンドは、次のとおりです。

celery worker -c 2 --broker=amqp://1000:[email protected]:5672//1000 

は(本当に)実行時にログファイルを変更する方法はあります?

Django log signalsが私を助けることができる場合、私は理解できませんでした)

私もTHIS答えを見つけたが、それは私のために動作しません。..あなたは労働者を実行しているときにこのような引数を経由してログファイルを指定することができることを知っている

おかげ

答えて

0

:あなたの答えのためのofficial doc

+0

おかげで

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

もっと私はで働いていますので、マルチプロセスでは、実行コマンドの変更が問題になります。または私は何かを逃している? – amichib

+0

ありがとうセロリマルチを使用していることを意味ですか?またはinit.dスクリプト?どちらの場合も、すべての作業者にオプションを指定できます。 –

+0

私はこのコマンドをusindindしていることを意味します:セロリのワーカー-c 5 --broker = amqp:// 1000:1000 @ localhost:5672 // 1000。
私は毎回ログファイルを設定することができません。私が間違っている? – amichib

関連する問題