Django日志

简单的Django日志

在settings里配置,会在屏幕输出日志

  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False,
  4. 'handlers': {
  5. 'console':{
  6. 'level':'DEBUG',
  7. 'class':'logging.StreamHandler',
  8. },
  9. },
  10. 'loggers': {
  11. 'django.db.backends': {
  12. 'handlers': ['console'],
  13. 'propagate': True,
  14. 'level':'DEBUG',
  15. },
  16. }
  17. }

实际项目中的日志

settings里配置

  1. # 定义一下log文件存放的位置
  2. BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
  3. # Django项目日志配置
  4. LOGGING = {
  5. # 固定搭配的一个版本号
  6. 'version': 1,
  7. # 禁用已经存在的logger实例
  8. 'disable_existing_loggers': False,
  9. # 定义了三个日志打印或保存的格式
  10. 'formatters': {
  11. # 标准的
  12. 'standard': {
  13. 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
  14. '[%(levelname)s][%(message)s]'
  15. },
  16. # 简单的格式
  17. 'simple': {
  18. 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  19. },
  20. # 收集
  21. 'collect': {
  22. 'format': '[%(asctime)s]%(message)s'
  23. }
  24. },
  25. # 日志的过滤条件
  26. 'filters': {
  27. # 需要debug=True
  28. 'require_debug_true': {
  29. '()': 'django.utils.log.RequireDebugTrue',
  30. },
  31. },
  32.  
  33. # 定义几个处理日志的方法
  34. 'handlers': {
  35. # 把日志都打印到终端窗口
  36. 'console': {
  37. 'level': 'DEBUG',
  38. 'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
  39. 'class': 'logging.StreamHandler',
  40. 'formatter': 'simple'
  41. },
  42. # 默认
  43. 'default': {
  44. 'level': 'INFO',
  45. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  46. 'filename': os.path.join(BASE_LOG_DIR, "s8_info.log"), # 日志文件
  47. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  48. 'backupCount': 5, # 日志文件个数
  49. 'formatter': 'standard',
  50. 'encoding': 'utf-8',
  51. },
  52. # 专门记录错误日志的
  53. 'error': {
  54. 'level': 'ERROR',
  55. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  56. 'filename': os.path.join(BASE_LOG_DIR, "s8_err.log"), # 日志文件
  57. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  58. 'backupCount': 5,
  59. 'formatter': 'standard',
  60. 'encoding': 'utf-8',
  61. },
  62. 'collect': {
  63. 'level': 'INFO',
  64. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  65. 'filename': os.path.join(BASE_LOG_DIR, "s8_collect.log"),
  66. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  67. 'backupCount': 5,
  68. 'formatter': 'collect',
  69. 'encoding': "utf-8"
  70. }
  71. },
  72. # 最后处理logger实例的配置
  73. 'loggers': {
  74. # 默认的logger应用如下配置
  75. '': {
  76. 'handlers': ['default', 'console', 'error'], # 上线之后可以把'console'移除
  77. 'level': 'DEBUG',
  78.  
  79. },
  80. # 名为 'collect'的logger还单独处理
  81. 'collect': {
  82. 'handlers': ['console', 'collect'],
  83. 'level': 'INFO',
  84. },
  85. 'collect.son': {
  86. 'handlers': ['console',],
  87. 'level': 'INFO',
  88. 'propagate': False,
  89. }
  90. },
  91. }

views视图函数中使用

  1. from django.shortcuts import render
  2. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  3. import logging
  4. # 生成一个以当前文件名为日志实例名字的logger
  5. logger = logging.getLogger(__name__)
  6.  
  7. # 自己随意起名生成logger
  8. collect_logger = logging.getLogger("collect")
  9.  
  10. data = []
  11. for i in range(1, 302):
  12. tmp = {"id": i, "name": "alex-{}".format(i)}
  13. data.append(tmp)
  14.  
  15. def user_list(request):
  16. # 去到当前请求的页码
  17. current_page = request.GET.get('page')
  18. logger.debug(current_page)
  19. paginator = Paginator(data, 10)
  20. # per_page: 每页显示条目数量
  21. # count: 数据总个数
  22. # num_pages:总页数
  23. # page_range:总页数的索引范围,如: (1,10),(1,200)
  24. # page: page对象
  25. try:
  26. users = paginator.page(current_page)
  27. # has_next 是否有下一页
  28. # next_page_number 下一页页码
  29. # has_previous 是否有上一页
  30. # previous_page_number 上一页页码
  31. # object_list 分页之后的数据列表
  32. # number 当前页
  33. # paginator paginator对象
  34. except PageNotAnInteger as e:
  35. logger.warning("传来的页码它不是个数字")
  36. logger.warning(str(e))
  37. # 如果请求的页码不是数字,默认返回第一页
  38. users = paginator.page(1)
  39. except EmptyPage as e:
  40. logger.warning("传来的页码它不正常")
  41. logger.warning(str(e))
  42. # 如果请求的页码超过了总页码,默认返回最后一页
  43. logger.debug("顺利走到了这一步,可以给前端页面返回数据了。。。")
  44. users = paginator.page(paginator.num_pages)
  45.  
  46. # 专门用来收集一些需要特殊保存的信息
  47. collect_logger.info("哈哈哈哈")
  48.  
  49. return render(request, 'user_list.html', {'user_list': users})

Django日志的更多相关文章

  1. Django 日志配置

    Django日志处理 settings配置 ########### # LOGGING # ########### BASE_LOG_DIR = os.path.join(os.path.dirnam ...

  2. django 日志logging的配置以及处理

    django日志官方文档https://docs.djangoproject.com/en/1.11/topics/logging/ 本文摘自http://davidbj.blog.51cto.com ...

  3. django日志,django-crontab,django邮件模块

    django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...

  4. Django日志信息路径的设置

    django日志信息路径的设置, 因为我们经常在代码业务上线时候 需要进行调试,查看代码的后台运行情况,就需要设置django项目的具体的日志信息运维的路径了 LOGGING = { 'version ...

  5. python的日志模块:logging;django的日志系统;django日志输出时间修改

    Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...

  6. 18:django 日志系统

    django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...

  7. 运维开发笔记整理-django日志配置

    运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...

  8. 八.django日志配置

    Django 日志 Django 使用Python 内建的logging 模块打印日志,Python 的logging 配置由四个部分组成: 记录器 —— Logger 处理程序 —— Handler ...

  9. Django 日志输出及打印--logging

    Django使用python自带的logging作为日志打印工具. logging是线程安全的,主要分为4部分: Logger 用户使用的直接接口,将日志传递给Handler Handler 控制日志 ...

随机推荐

  1. android mvp设计模式

    什么是MVP MVP,全称 Model-View-Presenter.要说MVP那就不得不说一说它的前辈——MVC(Model-View-Controller,模型-视图-控制器). View:对应于 ...

  2. redux-effect

    npm install --save redux-effect 通过redux中间件的方式使async方法可以在redux中使用. 如果你使用redux-saga,应该非常容易上手redux-effe ...

  3. Splash 笔记

    javascript rendering service a lightweight web browser can execute custom JavaScript in page context ...

  4. Using Fast Weights to Attend to the Recent Past

    Ba, Jimmy, et al. "Using Fast Weights to Attend to the Recent Past." Advances In Neural In ...

  5. ABP中连接已有数据库执行Sql或存储过程

    一:在EntityFramework项目中创建类如:ZSWDbContext. public class ZSWDbContext : AbpDbContext { public ZSWDbConte ...

  6. mfc小工具开发之定时闹钟之---多线程急线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

  7. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)

    前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...

  8. 2014-04-17-网易有道-研发类-笔试题&參考答案

    一套卷子,共10道小题,3道编程大题 一.填空&选择 1.选择:给了一个递归求Fibonacci的代码,问算法复杂度 指数复杂度 2.选择:忘记了,应该不难 3.选择:给你52张除掉大小王的扑 ...

  9. 蓝桥杯 C/C++参考题目 取球概率(数学题,概率)

    口袋中有5只红球,4只白球.随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂.但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计 ...

  10. 【ask】Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

    1.周五对nodejs tcp长连接服务器框架进行压测,一切开始比较常规(没什么特殊问题). 2.突然手一哆嗦,把压测用的客户端群一起关闭了. 3.这个时候nodejs的服务器爆出了"Cau ...