2017-02-01 23 views
0

ログに使用するのと同じハンドラの中で、Celeryという非同期関数からログgeneratdを収集する方法を見つけようとしています'非セロリ' django関数「通常の」Djangoログと同じ場所にCeleryログを取得するDjangoフォーマッタでログと書式設定

私は、ログに各3秒送っダミー関数を作成している

:私もこのような何かを試してみました

from celery.decorators import periodic_task 
from datetime import timedelta 

@periodic_task(run_every=timedelta(seconds=3)) 
def every_3_seconds(): 
    logr.debug("Hello world: Running (debug) periodic task!") 
    logr.info("Hello world: Running (info) periodic task!") 

clogger = get_task_logger(__name__) # Celery logger 

@periodic_task(run_every=timedelta(seconds=3)) 
def every_3_seconds(): 
    clogger.debug("HelloCelery: Running (debug) periodic task!") 
    clogger.info("HelloCelery: Running (info) periodic task!") 

ログの設定は(私の以前の試みですコメント)されています:

CELERYD_HIJACK_ROOT_LOGGER = False 
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'console': { 
      'class': 'logging.StreamHandler', 
      'formatter': 'verbose', 
     }, 
    }, 
    'formatters': { 
     'verbose': { 
      'format': 'HOPLA123 %(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' 
     } 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['console'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     }, 
     # 'django': { 
     #  'handlers': ['console'], 
     #  'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     # }, 
     # # Logger for the myappApp 
     # # Use: logr = logging.getLogger(__name__) in myappApp 
     # #  logr.debug("....") 
     # 'myappApp': { 
     #  'handlers': ['console'], 
     #  'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     #  'propagate': False, # To fix duplicate log issue. 
     # }, 
     # # Default Python Logger 
     # 'root': { 
     #  'handlers': ['console'], 
     #  'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     # }, 
     # 'celery': { 
     #  'handlers': ['console'], 
     #  'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     #  'propagate': True, 
     # }, 
    }, 
} 

私はスーパブルの各ログを出力するスーパーバイザ設定を持っています

何のログファイルがない場合:電子ファイル:セロリドキュメントに指定されているセロリ関数内

[program:gunicorn_django] 
environment=PYTHONPATH=/opt/myapp/myappServer/myappServer 
command = /opt/myapp/venv/bin/gunicorn wsgi -b 0.0.0.0:8000 --timeout 90 --access-logfile /dev/stdout --error-logfile /dev/stderr 
directory = /opt/myapp/myappServer 
user = root 
autostart=true 
autorestart=true 
stdout_logfile=/var/log/gunicorn.log 
stderr_logfile=/var/log/gunicorn.err 

[program:redis] 
command=redis-server 
autostart=true 
autorestart=true 
stdout_logfile=/var/log/redis.log 
stderr_logfile=/var/log/redis.err 

[program:django-celery] 
command=/opt/myapp/venv/bin/python ./manage.py celery --app=myappServer.celeryapp:app worker -B --loglevel=INFO 
directory=/opt/myapp/myappServer 
numprocs=1 
stdout_logfile=/var/log/celery.log 
stderr_logfile=/var/log/celery.err 
autostart=true 
autorestart=true 
startsecs=10 

マイこんにちはログは、/var/log/celery.errにログインしていますstderrが使用されます。

私は主に(正しくその後LogStashインスタンスによって解釈されるために)冗長フォーマッタでフォーマットされるように、/var/log/gunicorn.logでそれらを持っていると思います。私のロガーの定義に何か間違っていますか?

答えて

1

自分自身への応答: 私の質問からのコードは実際に動作します。

ようです:

CELERYD_HIJACK_ROOT_LOGGER = False 

はトリックをしました。

+0

ご自身の回答を承認済みとしてマークすることができます。 –