Python NGINX/Gunicorn/Django RQ:如何将每个RQ工作者记录到不同的文件
我们正在使用NGINX+Gunicorn+Django+RQ的体系结构,有几个RQ工作人员。 我们使用基本的Django日志设置(如下),具有滚动和最大文件大小,但是:Python NGINX/Gunicorn/Django RQ:如何将每个RQ工作者记录到不同的文件,python,django,logging,redis,django-rq,Python,Django,Logging,Redis,Django Rq,我们正在使用NGINX+Gunicorn+Django+RQ的体系结构,有几个RQ工作人员。 我们使用基本的Django日志设置(如下),具有滚动和最大文件大小,但是: 创建的文件有时非常小,只有几个字节,而不是定义的2MB 滚动文件的数量与定义的不同 问题: A.知道为什么实际的文件创建数量和大小不同吗? B是否可以使用滚动和最大文件大小策略将每个django rq工作日志记录到不同的文件 我们的日志记录设置: LOG_FILE_MAX_SIZE_MB = int(os.environ.get
A.知道为什么实际的文件创建数量和大小不同吗?
B是否可以使用滚动和最大文件大小策略将每个django rq工作日志记录到不同的文件 我们的日志记录设置:
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,
},
}
谢谢多进程试图使用标准日志记录(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'
},
相关链接:我启动并运行了ConcurrentRotatingFileHandler,但仍然只看到主进程的日志输出。