经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
django 捕获异常和日志系统过程详解
来源:jb51  时间:2019/7/19 9:11:22  对本文有异议

这一块的内容很少, 异常使用try except即可, 日志只需要几行配置.

使用装饰器捕获方法内的所有异常

我使用装饰器来整个包裹一个方法, 捕获方法中的所有异常信息.并将其转为json返回客户端.

  1. import functools
  2.  
  3. def catch_exception(func, code=500, *args, **kwargs):
  4. '''
  5. :param func:
  6. :return:
  7. '''
  8.  
  9. @functools.wraps(func, *args, **kwargs)
  10. def nefen(request, *args, **kwargs):
  11. try:
  12. back = func(request, *args, **kwargs)
  13. return back
  14. except Exception as e:
  15. # string = "捕获到异常"
  16. # x = type(e)
  17. #
  18. # if x == ValueError:
  19. # string = "数值转换异常:" + str(e)
  20. return JsonError(error_string=str(e), code=code)
  21.  
  22. return nefen

JsonError是之前编写的json工具.

装饰器的使用方法如下.

  1. class ReturnJson(APIView):
  2.  
  3. coreapi_fields=(
  4. DocParam("token"),
  5. )
  6. @catch_exception
  7. def get(self, request, *args, **kwargs):
  8. params=get_parameter_dic(request)
  9. return JsonResponse(data=params)
  10. @catch_exception
  11. def post(self, request, *args, **kwargs):
  12. params=get_parameter_dic(request)
  13. return JsonResponse(data=params)
  14. @catch_exception
  15. def put(self, request, *args, **kwargs):
  16. params=get_parameter_dic(request)
  17. return JsonResponse(data=params)

日志配置

  1. # 首先创建日志存储路径.
  2. import logging
  3. import django.utils.log
  4. import logging.handlers
  5.  
  6. log_path = os.path.join(BASE_DIR, "logs")
  7.  
  8. if not os.path.exists(log_path):
  9. os.makedirs("logs")
  10.  
  11. # DJANGO_LOG_LEVEL=DEBUG
  12.  
  13. LOGGING = {
  14. 'version': 1,
  15. 'disable_existing_loggers': False,
  16. 'formatters': {
  17. 'verbose': {
  18. 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
  19. },
  20. 'simple': {
  21. 'format': '%(levelname)s %(message)s'
  22. },
  23. 'standard': {
  24. 'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
  25. },
  26. },
  27. 'handlers': {
  28. 'default': {
  29. 'level':'DEBUG',
  30. 'class':'logging.handlers.RotatingFileHandler',
  31. 'filename': os.path.join(BASE_DIR,'logs','all.log'), #或者直接写路径:'c:\logs\all.log',
  32. 'maxBytes': 1024*1024*5, # 5 MB
  33. 'backupCount': 5,
  34. 'formatter':'standard',
  35. },
  36. 'console': {
  37. 'level': 'DEBUG',
  38. 'class': 'logging.StreamHandler',
  39. 'formatter': 'standard',
  40. },
  41. 'file': {
  42. 'level':'INFO',
  43. 'class':'logging.handlers.RotatingFileHandler',
  44. 'filename': os.path.join(BASE_DIR, 'logs','debug.log'), #或者直接写路径:'c:\logs\all.log',
  45. 'maxBytes': 1024*1024*5, # 5 MB
  46. 'backupCount': 5,
  47. 'formatter':'standard',
  48. },
  49. },
  50. # DEBUG(测试环境) CRITICAL(项目崩溃) ERROR(抛出异常未被捕获) WARNING(例如403) INFO(系统表现相关)
  51. 'loggers': {
  52. 'print': {
  53. 'handlers': ["file"],
  54. 'level': 'INFO',
  55. 'propagate': False
  56. },
  57. 'ifacerecognition': {
  58. 'handlers': ['default'],
  59. 'level': 'ERROR',
  60. },
  61. # 'django': {
  62. # 'handlers': ['default'],
  63. # 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
  64. # },
  65. 'django.request': {
  66. 'handlers': ['default'],
  67. 'level': 'ERROR',
  68. },
  69. },
  70. }

日志配置由三部分组成

1.日志格式formatters

2.日志处理方法, 例如保存到xxx.log文件或者别的什么, 甚至可以自动发送电子邮件.

3.日志器, 也就是正式的应用, 你可以获取一个log, 手动添加log内容.

一个向log文件写入内容的例子

  1. import logging
  2. class ReturnJson(APIView):
  3.  
  4. coreapi_fields=(
  5. DocParam("token"),
  6. )
  7.  
  8. @catch_exception
  9. def get(self, request, *args, **kwargs):
  10. params=get_parameter_dic(request)
  11. log=logging.getLogger("print")
  12. log.info("asdf")
  13. log.error("asdffff")
  14. return JsonResponse(data=params)

至此一个django项目所需要的组成部分基本齐全了. 剩下的工作只是业务逻辑的编写.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号