经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django日志配置
来源:cnblogs  作者:木子七  时间:2023/2/15 9:22:03  对本文有异议

Django使用Python内建的logging模块打印日志,配置由四个部分组成

  • 记录器:Logger
  • 处理程序:Handler
  • 过滤器:Filter
  • 格式化:formatter
 

记录器-Logger

Logger为日志系统的入口,每个logger命名都是bucket,可以向bucket写入需要处理的消息
Python定义以及几种日志级别:
  • DEBUG:用于调试目的的日志
  • INFO:普通的系统消息
  • WARNING:表示出现一个较小的问题
  • ERROR:表示出现一个较大的问题
  • CRITICAL:表示出现一个致命的问题
处理逻辑:
当一条消息传递给Logger的时候,消息的日志级别将与logger的日志级别进行比较
如果消息的日志级别大于等于logger的日志消息,该消息绩效往下处理,如果小于,该消息被忽略
Logger一旦决定消息需要处理,它将传递该消息给一个Handler
 
logger日志级别
级别
描述
CRITICAL
 
50
关键错误/消息
 
ERROR
40
错误
WARNING
30
警告消息
INFO
20
通知消息
DEBUG
 
10
调试
NOTSET
0
无级别

logger配置

logger对应的值是字典,其中每一个健都是logger的名字,每一个值又是个字典
  • level(可选) - logger的级别
  • propagate(可选) - logger的传播设置
  • filters(可选) - logger的fillter的标识符列表
  • handlers(可选) - logger的handler的标识符列表
配置示例
  1. #settings
  2. LOGGING = {
  3. #记录器
  4. 'loggers': {
  5. 'reboot': {
  6. 'handlers': ['reboot'],
  7. 'level': 'INFO',
  8. }
  9. }
  10. }
  11. '''
  12. level配置的日志级别为INFO
  13. 那么在程序中 如果使用logger.DEBUG,DEBUG级别小于INFO,则不会处理
  14. 如果是大于等于INFO,则会交给handlers处理日志
  15. '''
 

处理程序-Handler

handler决定如何处理logger中的每条消息,它表示一个特定的日志行为,例如将消息写到屏幕、文件中或者网络socket
与logger一样,handler也有一个日志解蔽,如果消息的日志级别小于handler的级别,handler将忽略这条消息
logger可以有多个handler,而每个handler可以有不同的日志级别
  1. #配置示例 settings
  2. LOGGING = {
  3. # 记录器
  4. 'loggers': {
  5. 'reboot': {
  6. 'handlers': ['reboot'], # 处理器对应下方handlers中的reboot
  7. 'level': 'INFO',
  8. }
  9. },
  10. # 处理器
  11. 'handlers': {
  12. 'reboot': {
  13. 'level': 'INFO',
  14. 'class': 'logging.StreamHandler', # 以流的形式写入
  15. 'formatter': 'reboot', # 指定交给哪个格式化处理
  16. }
  17. }
  18. }
  19. '''
  20. loggers中的reboot,定义级别为INFO,如果满足INFO级别,交给handlers处理,loggers中的handler配置的是reboot
  21. 在下发的handlers配置reboot的具体处理方式
  22. '''
class
  1. logging.StreamHandler 类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
  2. logging.FileHandler 将日志消息写入文件filename
  3. logging.handlers.DatagramHandler(hostport) 发送日志消息给位于制定hostport上的UDP服务器。使用UDP协议,将日志信息发送到网络
  4. logging.handlers.HTTPHandler(host, url) 使用HTTPGETPOST方法将日志消息上传到一台HTTP 服务器。
  5. logging.handlers.RotatingFileHandler(filename) 将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filenamel
  6. logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。
  7. logging.handlers.SysLogHandler 日志输出到syslog
  8. logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志
  9. logging.handlers.SMTPHandler 远程输出日志到邮件地址
  10. logging.handlers.MemoryHandler 日志输出到内存中的指定buffer
 

过滤器-Filters

filter用于对从logger传递给handler的日志记录进行额外的控制
默认情况满足日志级别的任何消息都被处理,可以使用filter,对日志处理添加额外的条件,例如只允许处理特定源的ERROR消息
filters还可以用于修改将要处理的日志记录的优先级,例如日志满足特定条件,可以通过filter将日志记录从ERROR降到WARNING
filters可以在logger上或者handler上,多个filter可以串联起来实现多层的filter行为
 

格式化-Formatters

日志记录需要转换成文本或者其他格式 ,formatter表示文本的格式
formatter通常由包含日志记录属性的Python格式字符串组成
消息日志格式
  1. #配置示例
  2. LOGGING = {
  3. 'version': 1, # 版本
  4. 'disable_existing_loggers': False,# 默认为TrueTrue:设置已存在的logger失效。False:让已存在的logger不失效,保证日志信息完整。一般情况下设置为False
  5. # 记录器
  6. 'loggers': {
  7. 'reboot': {
  8. 'handlers': ['reboot'],
  9. 'level': 'INFO',
  10. }
  11. },
  12. # 处理器
  13. 'handlers': {
  14. 'reboot': {
  15. 'level': 'INFO',
  16. 'class': 'logging.StreamHandler',
  17. 'formatter': 'reboot', # 指定
  18. }
  19. },
  20. # 格式化
  21. 'formatters': {
  22. 'reboot': {
  23. 'format': '%(asctime)s - %(pathname)s:%(lineno)d[%(levelname)s] - %(message)s'
  24. }
  25. }
  26. }

日志使用

  1. import logging
  2. # 生成logger对象 参数指定交给哪个loggers处理
  3. # 不传参可走Django内置的配置
  4. logger = logging.getLogger('reboot')
  5. logger.info('xxx')
Django内置logger
  • django-获取所有日志
  • django.request-处理与请求相关的日志,5xx响应报出ERROR日志,4xx报出warning日志
  • django.db.backends-处理与数据库之间交互的日志
  • django.security.* -处理与安全相关的日志
  • django.db.backends.schemea-处理数据库迁移时的日志
 

可用完整配置

  1. # 日志配置
  2. cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路径
  3. log_path = os.path.join(os.path.dirname(cur_path), 'Log')
  4. LOGGING = {
  5. 'version': 1,
  6. 'disable_existing_loggers': True,
  7. 'formatters': {
  8. # 日志格式
  9. 'standard': {
  10. 'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
  11. '[%(levelname)s]- %(message)s'},
  12. 'simple': { # 简单格式
  13. 'format': '%(levelname)s %(message)s'
  14. },
  15. },
  16. # 过滤
  17. 'filters': {
  18. },
  19. # 定义具体处理日志的方式
  20. 'handlers': {
  21. # 默认记录所有日志
  22. 'default': {
  23. 'level': 'INFO',
  24. 'class': 'logging.handlers.RotatingFileHandler',
  25. 'filename': os.path.join(log_path, 'django.log'.format(time.strftime('%Y-%m'))),
  26. 'maxBytes': 1024 * 1024 * 5, # 文件大小
  27. 'backupCount': 5, # 备份数
  28. 'formatter': 'standard', # 输出格式
  29. 'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
  30. },
  31. # 输出错误日志
  32. 'error': {
  33. 'level': 'ERROR',
  34. 'class': 'logging.handlers.RotatingFileHandler',
  35. 'filename': os.path.join(log_path, 'error-{}.log'.format(time.strftime('%Y-%m'))),
  36. 'maxBytes': 1024 * 1024 * 5, # 文件大小
  37. 'backupCount': 5, # 备份数
  38. 'formatter': 'standard', # 输出格式
  39. 'encoding': 'utf-8', # 设置默认编码
  40. },
  41. # 控制台输出
  42. 'console': {
  43. 'level': 'DEBUG',
  44. 'class': 'logging.StreamHandler',
  45. 'formatter': 'standard'
  46. },
  47. # 输出info日志
  48. 'info': {
  49. 'level': 'INFO',
  50. 'class': 'logging.handlers.RotatingFileHandler',
  51. 'filename': os.path.join(log_path, 'info-{}.log'.format(time.strftime('%Y-%m'))),
  52. 'maxBytes': 1024 * 1024 * 5,
  53. 'backupCount': 5,
  54. 'formatter': 'standard',
  55. 'encoding': 'utf-8', # 设置默认编码
  56. },
  57. },
  58. # 配置用哪几种 handlers 来处理日志
  59. 'loggers': {
  60. # 类型 为 django 处理所有类型的日志, 默认调用
  61. 'django': {
  62. 'handlers': ['default', 'console'],
  63. 'level': 'INFO',
  64. 'propagate': False
  65. },
  66. # log 调用时需要当作参数传入
  67. 'log': {
  68. 'handlers': ['error', 'info', 'console', 'default'],
  69. 'level': 'INFO',
  70. 'propagate': True
  71. },
  72. }
  73. }
 

原文链接:https://www.cnblogs.com/Mickey-7/p/17120790.html

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

本站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号