Logger模块

是python中用于便捷记录日志且线程安全的模块

使用logging模块记录日志涉及四个主要类:

logger提供了应用程序可以直接使用的接口;

handler将(logger创建的)日志记录发送到合适的目的输出;

filter提供了细度设备来决定输出哪条日志记录;

formatter决定日志记录的最终输出格式

1.具体介绍:

logger

每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名。

比如聊天工具的图形界面模块可以这样获得它的Logger:

LOG=logging.getLogger(”chat.gui”)

而核心模块可以这样:

LOG=logging.getLogger(”chat.kernel”)

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

handler

handler对象负责发送相关的信息到指定目的地。Python的日志系统有多种Handler可以使用。有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些 Handler可以把信息发送到网络上。如果觉得不够用,还可以编写自己的Handler。可以通过addHandler()方法添加多个多handler

用法:

Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
        Handler.setFormatter():给这个handler选择一个格式
        Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

常用的Handler:

1) logging.StreamHandler
   使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。它的构造函数是:
StreamHandler([strm])

ps:其中strm参数是一个文件对象。默认是sys.stderr

2) logging.FileHandler

和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。它的构造函数是:

FileHandler(filename[,mode])

ps:filename是文件名,必须指定一个文件名;mode是文件的打开方式。参见Python内置函数open()的用法。默认是’a',即添加到文件末尾。

3) logging.handlers.RotatingFileHandler

        这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建 一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把 文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建 chat.log,继续输出日志信息。它的构造函数是:

RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])

 ps:其中filename和mode两个参数和FileHandler一样。maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

4) logging.handlers.TimedRotatingFileHandler

      这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])

ps:其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。interval是时间间隔。when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:

  S 秒
  M 分
  H 小时
  D 天
  W 每星期(interval==0时代表星期一)
  midnight 每天凌晨

2.应用:

在Django中的使用

    1、项目里sesetti.py里配置

  1. BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
  2. LOGGING = {
  3. 'version': 1, # 保留字
  4. 'disable_existing_loggers': False, # 禁用已经存在的logger实例
  5. # 日志文件的格式
  6. 'formatters': {
  7. # 详细的日志格式
  8. 'standard': {
  9. 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
  10. '[%(levelname)s][%(message)s]'
  11. },
  12. # 简单的日志格式
  13. 'simple': {
  14. 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  15. },
  16. # 定义一个特殊的日志格式
  17. 'collect': {
  18. 'format': '%(message)s'
  19. }
  20. },
  21. # 过滤器
  22. 'filters': {
  23. 'require_debug_true': {
  24. '()': 'django.utils.log.RequireDebugTrue',
  25. },
  26. },
  27. # 处理器
  28. 'handlers': {
  29. # 在终端打印
  30. 'console': {
  31. 'level': 'DEBUG',
  32. 'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
  33. 'class': 'logging.StreamHandler', #
  34. 'formatter': 'simple'
  35. },
  36. # 默认的
  37. 'default': {
  38. 'level': 'INFO',
  39. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  40. 'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
  41. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  42. 'backupCount': 3, # 最多备份几个
  43. 'formatter': 'standard',
  44. 'encoding': 'utf-8',
  45. },
  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 * 50, # 日志大小 50M
  52. 'backupCount': 5,
  53. 'formatter': 'standard',
  54. 'encoding': 'utf-8',
  55. },
  56. # 专门定义一个收集特定信息的日志
  57. 'collect': {
  58. 'level': 'INFO',
  59. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
  60. 'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
  61. 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
  62. 'backupCount': 5,
  63. 'formatter': 'collect',
  64. 'encoding': "utf-8"
  65. }
  66. },
  67. 'loggers': {
  68. # 默认的logger应用如下配置
  69. '': {
  70. 'handlers': ['default', 'console', 'error'], # 上线之后可以把'console'移除
  71. 'level': 'DEBUG',
  72. 'propagate': True, # 向不向更高级别的logger传递
  73. },
  74. # 名为 'collect'的logger还单独处理
  75. 'collect': {
  76. 'handlers': ['console', 'collect'],
  77. 'level': 'INFO',
  78. }
  79. },
  80. }

2.使用

在视图函数中的应用实例

  1. import logging
  2. # 生成一个以当前文件名为名字的logger实例
  3. logger = logging.getLogger(__name__)
  4. # 生成一个名为collect的logger实例
  5. collect_logger = logging.getLogger("collect")
  6.  
  7. def index(request):
  8. logger.debug("我是debug")
  9. logger.info("我是info")
  10. logger.error("发现一个error")
  11. collect_logger.info("user1:广东")
  12.  
  13. return HttpResponse("OK")

 更多:https://docs.djangoproject.com/en/1.11/topics/logging/

Django之logging日志使用的更多相关文章

  1. Django 的 logging日志文件配置

    在Django的settings配置文件里配置以下信息: import os BASE_LOG_DIR = os.path.join(BASE_DIR , "log") # log ...

  2. Django之logging日志

    简介 Django使用python自带的logging 作为日志打印工具.简单介绍下logging. logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给 ...

  3. django中介模型,CBV模型,及logging日志配制

    1.中介模型 中介模型,这个是在我们创建表格时,多对多添加的时候应用到的,通过制定ManyToManyField字段中的through参数来定义,为两者的关系新建一个中介class 为什么会产生这个中 ...

  4. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

  5. Django 系统日志logging

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

  6. form,ajax注册,logging日志使用

    一.form表单类型提交注册信息 二.ajax版本提交注册信息 <!DOCTYPE html> <html lang="en"> <head> ...

  7. django使用logging记录日志

    django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...

  8. Django 配置使用日志

    一. Django中使用日志 Django中使用日志其实非常简单,只需要在项目使用的配置文件中(如果没有自定义,那么就是settings.py中)加以下设置即可,同时可以根据自己的需求进行修改: # ...

  9. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...

随机推荐

  1. About {DynamicResource {x:Static SystemColors.ControlBrushKey}}

    from : http://blog.sina.com.cn/s/blog_749e42850100sahi.html 前提: <system:String x:Key="{Compo ...

  2. Extjs不错的博客

    http://www.cnblogs.com/fangsui/category/372751.html http://www.cnblogs.com/WangJinYang/tag/EXT.NET/ ...

  3. MySQL技术内幕:SQL编程 第2章 数据类型 读书笔记

    2.1 类型属性 2.1.1 UNSIGNED 数字无符号化, INT的值 -2147483648 ~ 2147483647  INT UNSIGNED的值 0 ~ 4294967295 int a ...

  4. len()

    len() 用于统计序列的长度,字符串 .元组 .列表都属于序列 In [1]: str = "hello world" In [2]: len(str) Out[2]: 11

  5. STM32的操作过程,寄存器配置与调试过程(转载)

    很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子 ...

  6. 告别C#,进入了下一个阶段的学习啦

    嘿嘿,今天我们结束了C#的基础的学习,开始啦第二个阶段的学习,就是对SQL Server的学习.今天又是一个周一,又是一个新的开始,感觉我们都是一周一周的计算,而不是每天到这个点就是告别了今天的生活啦 ...

  7. js里面函数的内部属性

    1.arguments用來存放传输参数的集合,可以被调用多次,每次数組都不一样,增强了函数的强壮性 实例: function calc() { var sum = 0; /*参数为一个时候*/ if ...

  8. js将字符串转换为数字等类型

    1.js提供了parseInt()和parseFloat()两个转换函数. 2.ECMAScript中可用的3种强制类型转换如下:  Boolean(value)——把给定的值转换成Boolean型: ...

  9. PHP遍历文件夹及子文件夹所有文件(此外还有飞递归的方法)

    <html> <body> <?php function traverse($path = '.') { $current_dir = opendir($path); / ...

  10. web基础---->Fileupload文件的上传

    这里我们介绍文件上传的知识,使用的是apache的Commons FileUpload框架. 文件上传的使用 项目的部分结构如下: 一.使用Commons FileUpload的上传功能,我们需要引入 ...