我们正在使用NGINX + Gunicorn + Django + RQ的架构,以及几个rq-worker。 我们使用基本的Django日志记录设置(如下),翻转和最大文件大小,但是:
问题:
一个。知道为什么实际的文件创建数量和大小不同然后定义?
湾是否可以使用翻转和最大文件大小策略将每个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 :(得分: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