-1

我们使用 NGINX + Gunicorn + Django + RQ 的架构,有几个 rq-workers。我们使用基本的 Django 日志记录设置(如下),带有翻转和最大文件大小,但是:

  1. 创建的文件有时非常小 -几个字节而不是定义的 2MB
  2. 数字翻转文件与定义的不同。

问题:
一个。知道为什么实际文件创建数量和大小与定义不同吗?
湾。是否可以让每个 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,
    },
}

谢谢

4

1 回答 1

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'
    },

相关链接:这里

于 2017-02-23T13:19:00.627 回答