我已经在Django中创建了一个独立的脚本,但是尽管日志记录似乎配置正确,但是它无法将 stderr 记录到Django日志文件中。我在 Django 2.1 中使用了 Python 3.6 。
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 来将消息存储到日志文件中吗?
答案 0 :(得分: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