做开发离不开日志,以下是我在工作中写Django项目常用的logging配置。

  1. BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
  2. LOGGING = {
  3. 'version': 1,
  4. 'disable_existing_loggers': False,
  5. 'formatters': {
  6. 'standard': {
  7. 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
  8. '[%(levelname)s][%(message)s]'
  9. },
  10. 'simple': {
  11. 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  12. },
  13. 'collect': {
  14. 'format': '%(message)s'
  15. }
  16. },
  17. 'filters': {
  18. 'require_debug_true': {
  19. '()': 'django.utils.log.RequireDebugTrue',
  20. },
  21. },
  22. 'handlers': {
  23. 'console': {
  24. 'level': 'DEBUG',
  25. 'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
  26. 'class': 'logging.StreamHandler',
  27. 'formatter': 'simple'
  28. },
  29. 'SF': {
  30. 'level': 'INFO',
  31. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,根据文件大小自动切
  32. 'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
  33. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  34. 'backupCount': 3, # 备份数为3 xx.log --> xx.log.1 --> xx.log.2 --> xx.log.3
  35. 'formatter': 'standard',
  36. 'encoding': 'utf-8',
  37. },
  38. 'TF': {
  39. 'level': 'INFO',
  40. 'class': 'logging.handlers.TimedRotatingFileHandler', # 保存到文件,根据时间自动切
  41. 'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
  42. 'backupCount': 3, # 备份数为3 xx.log --> xx.log.2018-08-23_00-00-00 --> xx.log.2018-08-24_00-00-00 --> ...
  43. 'when': 'D', # 每天一切, 可选值有S/秒 M/分 H/小时 D/天 W0-W6/周(0=周一) midnight/如果没指定时间就默认在午夜
  44. 'formatter': 'standard',
  45. 'encoding': 'utf-8',
  46. },
  47. 'error': {
  48. 'level': 'ERROR',
  49. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  50. 'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件
  51. 'maxBytes': 1024 * 1024 * 5, # 日志大小 50M
  52. 'backupCount': 5,
  53. 'formatter': 'standard',
  54. 'encoding': 'utf-8',
  55. },
  56. 'collect': {
  57. 'level': 'INFO',
  58. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  59. 'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
  60. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  61. 'backupCount': 5,
  62. 'formatter': 'collect',
  63. 'encoding': "utf-8"
  64. }
  65. },
  66. 'loggers': {
  67. '': { # 默认的logger应用如下配置
  68. 'handlers': ['SF', 'console', 'error'], # 上线之后可以把'console'移除
  69. 'level': 'DEBUG',
  70. 'propagate': True,
  71. },
  72. 'collect': { # 名为 'collect'的logger还单独处理
  73. 'handlers': ['console', 'collect'],
  74. 'level': 'INFO',
  75. }
  76. },
  77. }

附:Python logger流示图

Django logging 的配置方法的更多相关文章

  1. python3-开发进阶Django-debug-toolbar的配置和Django logging的配置

    阅读目录 django-debug-toolbar的配置 Django logging的配置 一.django-debug-toolbar的配置 1.介绍 django-debug-toolbar 是 ...

  2. python - django (logging 日志配置和简单使用)

    1. settings 配置 # 配置日志 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 's ...

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

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

  4. python 全栈开发,Day96(Django REST framework 视图,django logging配置,django-debug-toolbar使用指南)

    昨日内容回顾 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFie ...

  5. [转]django 日志logging的配置以及处理

    http://davidbj.blog.51cto.com/4159484/1433741 日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用途.在J ...

  6. Django中把SQLite数据库转换为Mysql数据库的配置方法

    我们在学习和开发Django的时候,一般是使用SQLite作为数据库.在正式讲网站部署上线是用MySQL数据库比较多.MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好.下面讲讲如 ...

  7. ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用

    一.ModelViewSet 路由 因为我们正在使用ViewSet代替View,实际上已经不再需要自己来设计URL的配置了.将资源和视图.URL绑定到一起是一个可以自动完成的过程,只需要使用Route ...

  8. 第十三篇Django Logging配置样例

    第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...

  9. Django静态文件配置-request方法-ORM简介-字段的增删改查

    app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...

随机推荐

  1. STM32 Keil仿真调试

    引用:http://blog.sina.com.cn/s/blog_3c63d2bd0102vt9a.html 问题描述:使用MDK进行软件设计时没有使用ST官方的模板而是手动建立的工程,使用ST官方 ...

  2. 7.springboot+mybatis+redis整合

    选择生成的依赖 选择保存的工程路径 查询已经生成的依赖,并修改mysql的版本 <dependencies> <dependency> <groupId>org.s ...

  3. spring MVC 转发与重定向(传参)

    return "forward:index.jsp"; //转发  return "forward:user.do?method=reg5"; //转发 ret ...

  4. [转]C# Eval在asp.net中的用法及作用

    原文链接:http://www.cnblogs.com/Mr_JinRui/archive/2010/07/06/1772129.html Eval( " ")和Bind( &qu ...

  5. overleaf 提交arXiv 不成功

    从overleaf下载的PDF不能够直接提交给arXiv,但是可以在submit中选择导出下载压缩包,图片不能是png,最好是PDF 或者eps. 参考文献是bbl 文件,不是bib.

  6. js隐式类型转换,预编译、递归、作用域,作用域链、闭包、立即执行函数、继承圣杯模式

    隐式类型转换 调用Number()当有运算符(加减乘除,求余)时,会调用Number()转为数字再运算,除了 加 当 有字符串时就变身成拼接Boolean();String(); typeof()st ...

  7. sql (5) 左右连接

    左连接 SQL LEFT JOIN LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行.语法SELECT colu ...

  8. hibernate4.3.8的dialect和创建SessionFactory遇到的一些问题

    好久不用hibernat,心里记着的还是hibernate3的标准,今天换成hibernate4.3.8后问题层出不穷啊... 首先是hibernate4.3.8中使用mysql方言时,hiberna ...

  9. iptables 命令大全

    1.连续端口配置 iptables可以方便的配置多个端口.其中根据端口的连续性,又可分为连续端口配置和不连续端口配置. 如: -A INPUT -p tcp –dport 21:25 -j DROP/ ...

  10. thinkphp 模型定义

    模型定义 模型类并非必须定义,只有当存在独立的业务逻辑或者属性的时候才需要定义. 模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义 ...