2017-02-21 15 views
-1

Мы используем архитектуру NGINX + Gunicorn + Django + RQ с несколькими rq-рабочими. Мы используем основные настройки протоколирования Джанго (следует), с опрокидыванием и макс-размера файла, НО: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 решает проблему.

Например, в Джанго 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 и работает, но до сих пор только видим выход журнала первичного процесса. –

 Смежные вопросы

  • Нет связанных вопросов^_^