1. 今日内容:
    1logging模块
    2re模块
  1. 1logging模块
    -- 什么是logging模块
    -- logging模块是用来进行记录日志的模块,主要作用是将想要输出的日志进行分级,然后以不同的形式呈现给用户或者记录在文件中
    -- logging日志的级别
    -- logging日志中,主要分为五个等级:
    debug: 最低的级别,用于记录默认的运行及调试信息,等级编号为 10
    info:信息级别,用于记录用户的日常使用信息,等级编号为 20
    warning:警告信息,用于记录程序中较为重要的信息,编号等级为 30
    error:错误信息,用于记录在程序中出现的错误信息,编号等级 40
    critical:致命错误信息,编号等级为 50
    -- 如何使用logging记录信息
  1. import logging
  2.  
  3. logging.debug("debug")
  4. logging.info("info")
  5. logging.warning("warning")
  6. logging.error("error")
  7. logging.critical("critical")
  8.  
  9. # 输出信息为:
  10. # WARNING:root:warning
  11. # ERROR:root:error
  12. # CRITICAL:root:critical
  13. # 在输出信息中没有输出前两个打印结果是因为打印的级别不够
  1. -- 如何自定义打印结果的格式及选择打印的位置?
    -- 我们发现,在进行打印时,信息的输出格式是固定的,且只能打印到控制台中,那么如何对打印信息进行格式化呢?
    -- logging.basicConfig() 方法
  1. logging.basicConfig(
  2. filename="aaa.log",
  3. filemode="at",
  4. datefmt="%Y-%m-%d %H:%M:%S %p",
  5. format="%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s",
  6. level=10
  7. )
  8.  
  9. logging.debug("debug")
  10. logging.info("info")
  11. logging.warning("warning")
  12. logging.error("error")
  13. logging.critical("critical")
  1. -- 格式化输出的全部可用名称
    %(name)sLogger的名字,并非用户名,详细查看
    %(levelno)s:数字形式的日志级别
    %(levelname)s:文本形式的日志级别
    %(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s:调用日志输出函数的模块的文件名
    %(module)s:调用日志输出函数的模块名
    %(funcName)s:调用日志输出函数的函数名
    %(lineno)d:调用日志输出函数的语句所在的代码行
    %(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s:字符串形式的当前时间。默认格式是 2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d:线程ID。可能没有
    %(threadName)s:线程名。可能没有
    %(process)d:进程ID。可能没有
    %(message)s:用户输出的消息
  2.  
  3. -- 定义了格式及输出位置之后,由于有时需要将同一份日志信息输出到不同的位置,此时,上面的方法是不能实现的此时需要进一步进行配置
    -- logging日志模块的四大组成部分
    -- 1.Logger 日志生成器 产生日志
    -- 2.Filter 日志过滤器 过滤日志
    -- 3.Handler 日志处理器 对日志进行格式化,并输出到指定位置(控制台或文件)
    -- 4.Formater 处理日志的格式
    -- 日志的工作周期及四部分的关系
    --> 首先一条日志通过日志生成器生成,并根据自己的level设置判断日志是否需要生成
    --> 通过日志生成器生成的日志交给到日志过滤器进行过滤(日志过滤器使用较少)
    --> 日志过滤器将通过的日志信息交给日志处理器,并使用formatter的格式对其进行格式化及将规定level的信息输出到不同的位置
  4.  
  5. -- 创建具有多输出路径的日志生成器:此生成器可以进行使用,但是此方法过于简单,如果想要设置的较为复杂需要配置很多信息,使用起来较为复杂,
  1.  
  1. # 创建日志生成器
  2. logger = logging.getLogger()
  3.  
  4. # 创建句柄对象
  5. file_handler = logging.FileHandler("aaa.txt",encoding="utf-8")
  6. cmd_handler = logging.StreamHandler()
  7.  
  8. # 创建格式化信息
  9. file_fmt = logging.Formatter(
  10. fmt="%(asctime)s - %(name)s - %(levelname)s: %(message)s",
  11. datefmt="%m-%d %H:%M:%S %p"
  12. )
  13. cmd_fmt = logging.Formatter(
  14. fmt="%(asctime)s - %(levelname)s : %(message)s",
  15. datefmt="%Y/%m/%d %H:%M:%S"
  16. )
  17.  
  18. # 为生成器绑定句柄对象
  19. logger.addHandler(file_handler)
  20. logger.addHandler(cmd_handler)
  21.  
  22. # 为句柄对象绑定输出的格式
  23. file_handler.setFormatter(file_fmt)
  24. cmd_handler.setFormatter(cmd_fmt)
  25.  
  26. # 为句柄对象及生成器设置level
  27. logger.setLevel(10)
  28. file_handler.setLevel(20)
  29. cmd_handler.setLevel(40)
  30.  
  31. logger.critical("logger生成的debug日志")
  1.  
  1. -- 由于以上方法配置的信息较为简单,且不能完整的配置各种信息,为了能够完整的进行配置,logging提供了logging.get
  1. file_fmt = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
  2. '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
  3.  
  4. cmd_fmt = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  5.  
  6. id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
  7. logfile_path = r"H:\py8-study\practice\day20\aaaa.txt" # 配置文件路径
  8.  
  9. LOGGING_DIC = {
  10. 'version': 1,
  11. 'disable_existing_loggers': False,
  12. 'formatters': {
  13. 'file_fmt': {
  14. 'format': file_fmt
  15. },
  16. 'cmd_fmt': {
  17. 'format': cmd_fmt
  18. },
  19. },
  20. 'filters': {},
  21. 'handlers': {
  22. #打印到终端的日志
  23. 'cmd_handler': {
  24. 'level': 'DEBUG',
  25. 'class': 'logging.StreamHandler', # 打印到屏幕
  26. 'formatter': 'cmd_fmt'
  27. },
  28. #打印到文件的日志,收集info及以上的日志
  29. 'file_handler': {
  30. 'level': 'DEBUG',
  31. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
  32. 'formatter': 'file_fmt',
  33. 'filename': logfile_path, # 日志文件
  34. 'maxBytes': 1024*1024*5, # 日志大小 5M
  35. 'backupCount': 5, #日志文件最大个数,超过后会覆盖之前的文件
  36. 'encoding': 'utf-8', # 日志文件的编码
  37. },
  38. },
  39. 'loggers': {
  40. #logging.getLogger(__name__)拿到的logger配置
  41. 'aa': {
  42. 'handlers': ['cmd_handler', 'file_handler'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
  43. 'level': 'DEBUG',
  44. 'propagate': True, # 向上(更高level的logger)传递
  45. },
  46. },
  47. }
  48.  
  49. import logging.config
  50.  
  51. def get_logger(name):
  52. logging.config.dictConfig(LOGGING_DIC)
  53. logger = logging.getLogger(name)
  54. return logger
  55.  
  56. logger = get_logger("aa")
  57. logger.error("最终版打印的日志信息11111"
  1.  

day20 logging模块、re模块的更多相关文章

  1. logging ,re 模块

    一,复习 # random: random() randint() choice() sample() # 序列化:对象需要持久化存储或传送 对象 => 字符串 # json: 用于传输 # - ...

  2. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  3. hashlib模块configparser模块logging模块

    hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长 ...

  4. shelve模块,sys模块,logging模块

    1.shelve模块 用于序列化的模块,shelve模块比pickle模块简单,只有open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型. impor ...

  5. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  6. Python3 logging模块&ConfigParser模块

    ''' 博客园 Infi_chu ''' ''' logging模块 该模块是关于日志相关操作的模块 ''' import logging # logging.debug('debug') # log ...

  7. python常用模块补充hashlib configparser logging,subprocess模块

    一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...

  8. os模块/sys模块/json/pickle模块/logging模块(day16整理)

    目录 今日内容 os模块 对文件操作 对文件夹此操作 辅助性的 了解 sys模块 json和pickle模块 json模块 pickle模块 logging模块 日志级别 添加设置 自定义配置 今日内 ...

  9. python day 9: xlm模块,configparser模块,shutil模块,subprocess模块,logging模块,迭代器与生成器,反射

    目录 python day 9 1. xml模块 1.1 初识xml 1.2 遍历xml文档的指定节点 1.3 通过python手工创建xml文档 1.4 创建节点的两种方式 1.5 总结 2. co ...

  10. os模块 sys模块 json/pickle 模块 logging模块

    目录 模块 1. os模块 2. sys模块 3. json和pickle模块 4. logging模块 (1)日志配置 (2)实际开发中日志的使用 模块 1. os模块 os模块有什么用 与操作系统 ...

随机推荐

  1. [Svelte 3] Use an onMount lifecycle method to fetch and render data in Svelte 3

    Every Svelte component has a lifecycle that starts when it is created, and ends when it is destroyed ...

  2. javascript内置对象:Date

    JavaScript内置函数:Date时间<script>    var today=new Date();    weeks=["日","一",& ...

  3. [转]vue解决刷新页面vuex数据、params参数消失的问题

    一般项目都会有一些逻辑需要传递值给另一个页面,那么有的时候就会出现一个问题:用户刷新了页面,诶?数据没了,参数错误.那么今天经过总结,解决了这个问题.我在最新的项目中,通过了一下几种情况进行传值: 1 ...

  4. 编码问题2 utf-8和Unicode的区别

    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由. 众所周知 ...

  5. 強悍的Linq

    在使用Linq轉化XML,ActiveDirectory,Datatable,Array,List,Dictionary后意識到Linq的強大.VS居然還提供專門的LINQ Explorer,不覺明厲 ...

  6. 并发编程入门(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题

    boost的mutex,condition_variable非常好用.但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装.因此通过对 ...

  7. 自己总结:汇编CALL和RET指令

    ret指令,相当于 pop IP:修改IP的内容,从而实现近转移 retf指令,相当于 pop IP pop CS:修改CS和IP的内容,从而实现远转移 -------------- CPU执行cal ...

  8. Linux创建删除文件和文件夹

    要想删除和创建,需要有root权限 [xwg@bogon ~]$ su root密码:[root@bogon xwg]# cd /home/a      切换到目录a[root@bogon a]# t ...

  9. Book Borders (Gym - 101480B)(二分)

    题目链接 题解:用二分查询一下每次满足长度的下一个加上它的长度. #include <bits/stdc++.h> using namespace std; typedef long lo ...

  10. STL漫谈

    从现在开始,想写一个关于STL工具的各种tip类的东西,记录下那些细节,以免以后使用STL工具时出错. 1.关于map,如果需要第一个键值需要放进一个结构体,那么结构体是需要写好其自定义的排序规则的, ...