0

我在 Django 中创建了一个独立的脚本,但是虽然日志似乎配置正确,但它无法将stderr记录到 Django 日志文件中。我将Python 3.6Django 2.1一起使用。

Django 脚本my_script.py的内容:

import os
import django
import logging


os.environ['DJANGO_SETTINGS_MODULE'] = 'my_project.settings'
django.setup()
logger = logging.getLogger('my_script')


def main():
    logger.debug('This message is logged')
    raise Exception('Error messages (stderr) are NOT logged!')


if __name__ == "__main__":
    main()

我在my_project/settings.py 中的日志记录配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'my_scrip_file': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': 'logs/my_script.log',
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'verbose',
        },
    },
    'loggers': {
        'my_script': {
            'handlers': ['my_scrip_file'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
            'propagate': True
        },
    },
}

考虑到脚本必须通过 运行python my_script.py,有人知道如何让stderr将消息存储到日志文件中吗?

4

1 回答 1

0

将stderr重定向到日志文件是一种选择,但我相信try带有回溯的简单子句更简单整洁:

# my_script.py
import os
import django
import traceback
import logging


os.environ['DJANGO_SETTINGS_MODULE'] = 'my_project.settings'
django.setup()
logger = logging.getLogger('my_script')


def main():
    logger.debug('This message is logged')
    raise Exception('Error messages (stderr) now are also logged!')


if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        logger.error(traceback.format_exc())
        raise e
于 2018-09-12T18:12:38.363 回答