2017-02-21 4 views
-1

NGINX + Gunicorn + Django + RQのアーキテクチャをいくつかのrq-workersとともに使用しています。作成されたファイルは、時には非常に小さいNGINX/Gunicorn/Django-RQ:各rq-workerを別のファイルに記録する方法

  1. - 代わりに定義された2メガバイトの数バイト: 私たちは、ロールオーバーおよび最大ファイルサイズで、(次の)基本的なDjangoのロギング設定を使用しますが、。
  2. 番号ロールオーバーファイルは、定義されているものとは異なります。

質問:
a。実際のファイル作成数とサイズが異なる理由は何ですか?
b。ロールオーバーと最大ファイルサイズのポリシーを使用して、django rq-workerの各ログを別のファイルに保存することはできますか?

私たちのログ設定:

LOG_FILE_MAX_SIZE_MB = int(os.environ.get('log_file_max_size_mb', 1)) 
LOG_FILES_ROTATE_NUM = int(os.environ.get('log_files_rotate_num', 8)) 

log_file_dir = os.path.dirname(LOG_FILE_FULL_PATH) 
if not os.path.exists(log_file_dir): 
    os.makedirs(log_file_dir, 0777) 

DATE_TIME_FORMAT = "%Y-%m-%d %H:%M:%S" 
VERBOSE_LINE_FORMAT = '%(asctime)s - %(levelname)s - %(process)d - %(thread)d  - %(filename)s - %(message)s' 
SIMPLE_LINE_FORMAT = '[%(levelname)-7s] %(asctime)s - %(message)s' 

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
'formatters': { 
    'verbose': { 
     'format': VERBOSE_LINE_FORMAT, 
     'datefmt': DATE_TIME_FORMAT 
    }, 
    'simple': { 
     'format': SIMPLE_LINE_FORMAT, 
     'datefmt': DATE_TIME_FORMAT 
    }, 
}, 
'handlers': { 
    'console': { 
     'level': 'DEBUG', 
     'class': 'logging.StreamHandler', 
     'formatter': 'verbose' 
    }, 
    'fat_app_logfile': { 
     'level': 'DEBUG', 
     'class': 'logging.handlers.RotatingFileHandler', 
     'maxBytes': 1024*1024*LOG_FILE_MAX_SIZE_MB, 
     'backupCount': LOG_FILES_ROTATE_NUM, 
     'filename': LOG_FILE_FULL_PATH, 
     'formatter': 'verbose' 
    }, 
    'rq_app_logfile': { 
     'level': 'DEBUG', 
     'class': 'logging.handlers.RotatingFileHandler', 
     'maxBytes': 1024*1024*LOG_FILE_MAX_SIZE_MB, 
     'backupCount': LOG_FILES_ROTATE_NUM, 
     'filename': LOG_FILE_FULL_PATH, 
     'formatter': 'verbose' 
    }, 
}, 
'loggers': { 
    'MainLogger': { 
     'handlers': ['console', 'fat_app_logfile'], 
     'propagate': True, 
     'level': 'DEBUG', 
    }, 
    'rq_scheduler': { 
     'handlers': ['console'], 
     'level': 'DEBUG', 
     'propagate': True, 
    }, 
} 

はあなたに

答えて

0

ありがとうござい問題ではなくcloghandlerを使用して、同時書き込みをサポートしていない標準ログ(logging.handlers.RotatingFileHandler)を使用しようとしたマルチプロセスから出てきます。 ConcurrentRotatingFileHandlerは問題を解決します。ジャンゴsetting.pyで例えば

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
# 'filters': { 
#  'require_debug_false': { 
#   '()': 'django.utils.log.RequireDebugFalse' 
#  } 
# }, 
'formatters': { 
    'verbose': { 
     'format': VERBOSE_LINE_FORMAT, 
     'datefmt': DATE_TIME_FORMAT 
    }, 
    'simple': { 
     'format': SIMPLE_LINE_FORMAT, 
     'datefmt': DATE_TIME_FORMAT 
    }, 
}, 
'handlers': { 
     'fat_app_logfile': { 
     'level': 'DEBUG', 
     'class': 'cloghandler.ConcurrentRotatingFileHandler', 
     'maxBytes': 1024 * 1024 * LOG_FILE_MAX_SIZE_MB, 
     'backupCount': LOG_FILES_ROTATE_NUM, 
     'filename': LOG_FILE_FULL_PATH, 
     'formatter': 'verbose' 
    }, 

関連リンク:here

+0

私が稼働してConcurrentRotatingFileHandlerを得たが、それでも唯一の主要プロセスのログ出力を見て。 –

関連する問題