我有一个从v1.8迁移到v1.10的Django应用程序。在执行此工作的过程中,我通过以下方式运行了我的应用程序:
python -Wall manage.py runserver
这样做会使控制台中出现许多Python警告。我想在我的Django应用程序日志中显示这些警告,以便稍后进行检查。我以为我的应用程序的日志处理程序会捕获这些警告,但事实并非如此。日志处理程序如下所示(取自settings.py):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': 'myapp.log',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'WARNING',
},
'myapp': {
'handlers': ['file'],
'level': 'WARNING',
},
}
}
Run Code Online (Sandbox Code Playgroud)
如何捕获-WallDjango日志中的Python警告(带有)以供以后检查?
小智 5
显示的警告python -Wall manage.py <command>是使用警告模块生成的。在Python2.7日志记录模块文档中,它们有一部分显示了如何将警告模块中的消息集成到日志记录中。
将它们添加到您的设置文件。
import logging
logging.captureWarnings(True)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': 'myapp.log',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'WARNING',
},
'myapp': {
'handlers': ['file'],
'level': 'WARNING',
},
'py.warnings': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True
}
}
}
Run Code Online (Sandbox Code Playgroud)
添加它之后,尝试运行任何manage.py命令,您将看到写入myapp.log文件的警告。
此行指示日志记录以捕获py.warnings 警告:
logging.captureWarnings(True)
Run Code Online (Sandbox Code Playgroud)
这指示日志记录从py.warnings记录器路由(在此示例中为文件处理程序)警告:
'py.warnings': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |