为什么在 django 中使用日志记录会损坏日志文件?

问题描述 投票:0回答:1

当我在 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")

但是发送几个请求后,日志文件看起来像这样 enter image description here enter image description here

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

django logging pycharm python-logging
1个回答
0
投票

经过多次尝试,发现更新pycharm到新版本可以解决上述问题,我将pycharm更新到最新版本2024.1.1解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.