2017-02-21 50 views
-1

我們正在使用NGINX + Gunicorn + Django + RQ的體系結構,以及多個rq工作者。 我們使用基本的Django的日誌記錄設置(如下圖),側翻和最大文件大小,但:NGINX/Gunicorn/Django-RQ:如何將每個rq工作者記錄到不同的文件

  1. 創建的文件有時非常小 - 幾個字節,而不是定義2MB
  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

問題從多進程嘗試使用標準日誌(logging.handlers.RotatingFileHandler)不支持併發寫入,而不是使用cloghandler出現。 ConcurrentRotatingFileHandler解決了這個問題。

例如在Django 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啓動和運行,但仍然只看到的主要過程的日誌輸出。 –