当我在 django 项目中使用日志记录时,我发现在 2-3 个借口请求后,日志文件损坏了。为什么
在settings.py中
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)-8s [%(pathname)s:%(lineno)d] [%(funcName)s] [%(message)s]'
}
},
'handlers': {
'console_handler': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard',
},
'info_handler': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'standard',
'filename': os.path.join(INFO_LOG_DIR, 'info.log'),
'when': 'midnight',
'backupCount': 30,
'encoding': 'UTF-8',
},
'error_handler': {
'level': 'ERROR',
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'standard',
'filename': os.path.join(ERROR_LOG_DIR, 'error.log'),
'when': 'midnight',
'backupCount': 30,
'encoding': 'UTF-8',
},
'homework': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': os.path.join(HOMEWORK_LOG_DIR, 'homework.log'),
'maxBytes': 1024 * 1024 * 10,
'backupCount': 100,
'encoding': 'UTF-8',
}
},
'loggers': {
'data_analysis': {
'handlers': ['console_handler', 'info_handler', 'error_handler'],
'level': 'DEBUG',
'propagate': True,
},
'homework': {
'handlers': ['homework', 'console_handler'],
'level': 'DEBUG',
'propagate': True,
}
},
}
在其他py文件中:
log = logging.getLogger("data_analysis")
python版本:3.6.8 Django 版本:3.2.3
我的项目有一部分使用了多线程,但是我在测试的时候,把多线程的代码注释掉了
我希望能够正确登录
第一次更新:
现状: 我用uwsgi
经过测试,发现只要我把日志配置改成:
'format': '%(asctime)s %(pathname)-8s %(message)s'
,就不会损坏日志文件,无论我请求多少次api,都可以打开日志文件,但是只要日志格式长度改变,例如:'format': '%(asctime)s %(levelname)-8s %(pathname)-8s %(message)s'
,那么三个请求之后一定会出现错误
windows 和 mac 不同,我同事昨天能够使用
'format':'%(asctime)s %(levelname)-8s %(pathname)s[line:%(lineno)d] [%(funcName)s] %(message)s'
格式而没有日志损坏,然后我今天早上再次测试了它。无法使用昨天的日志格式。如果将日志格式改为该格式,则日志可以正常使用。 'format':'%(asctime)s %(levelname)-8s %(pathname)s %(funcName)s %(message)s'
再次更新:
我在服务器上再次尝试,发现日志文件没有问题,发送请求并没有损坏日志文件,日志文件记录了所有日志,但问题仍然存在于我的Mac上。
在我的mac上,只有日志格式小于或等于3个变量时才有效,例如:'format': '%(asctime)s %(pathname)-8s %(message)s',是因为我的pycharm?我用的是2020.3.5
经过多次尝试,发现更新pycharm到新版本可以解决上述问题,我将pycharm更新到最新版本2024.1.1解决了问题