zoukankan      html  css  js  c++  java
  • Python模块学习

    logging模块

    logging模块用于日志的打印记录等,是一个健壮的Python程序所必须具有的模块。

    logging模块支持的日志级别主要有五种:DEBUG,INFO,WARNING,ERROR,CRITICAL。优先级为:CRITICAL(50) > ERROR(40) > WARNING(30) > INFO(20) > DEBUG(10) 。 默认的级别为WARNING。Python只会打印比当前级别高的日志,比如我同时刷出了INFO和ERROR级别的日志,如果我的日志级别设置的为WAIRNING,那么只会打印ERROR的日志。

    基本使用

    引入logging模块,通过logging.级别来输出日志信息

    1
    2
    3
    4
    5
    6
    7
    import logging
     
    logging.debug('debug level message')
    logging.info('info level message')
    logging.warning('warning level message')
    logging.error('error level message')
    logging.critical('crtical level message')

    注意:由于默认级别为WARNING,所以上面的例子只会打印WARNING、ERROR、CRITICAL输出的信息

    定义日志格式并输出到文件

    logging提供了基础的日志模版,可以定义日志的输出格式,以及输出位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import logging
     
     
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S',
                        filename='log.log',
                        filemode='w')
     
    logging.debug('debug level message')
    logging.info('info level message')
    logging.warning('warning level message')
    logging.error('error level message')
    logging.critical('crtical level message')

    basicConfig支持的参数含义为:

    • level:为日志级别,可选参数有logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL,分别对应logging的五种日志级别。
    • filename: 表示日志文件的名称及路径。
    • filemode: 表示日志文件的打开模式,默认不指定的情况下为a,可以改为w。
    • datefmt: 对时间进行格式定制,和时间的格式化字符是相同的。
    • format: 对日志格式进行定义。
     1 %(name)s  # Logger的名字
     2 %(levelno)s  # 数字形式的日志级别
     3 %(levelname)s # 文本形式的日志级别
     4 %(pathname)s # 调用日志输出函数的模块的完整路径名,可能没有
     5 %(filename)s # 调用日志输出函数的模块的文件名
     6 %(module)s # 调用日志输出函数的模块名
     7 %(funcName)s # 调用日志输出函数的函数名
     8 %(lineno)d # 调用日志输出函数的语句所在的代码行
     9 %(created)f # 当前时间,用UNIX标准的表示时间的浮 点数表示
    10 %(relativeCreated)d # 输出日志信息时的,自Logger创建以 来的毫秒数
    11 %(asctime)s # 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    12 %(thread)d # 线程ID。可能没有
    13 %(threadName)s # 线程名。可能没有
    14 %(process)d # 进程ID。可能没有
    15 %(message)s # 用户输出的消息
    format支持的日志格式

    多模块利用logging记录日志

    我们可以把logging写到一个模块中,然后在需要记录的地方,导入模块,记录信息即可。

    # writelog模块文件:
    import logging
     
    logging.basicConfig(level=logging.WARNING,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S',
                        filename='log.log',
                        filemode='a')
     
     
     
     
    # 需要记录日志的py文件
    import writelog
     
    writelog.logging.debug('debug level message')
    writelog.logging.info('info level message')
    writelog.logging.warning('warning level message')
    writelog.logging.error('error level message')
    writelog.logging.critical('crtical level message')
    

    更复杂的日志配置

    在进行配置之前需要先了解logging模块中高级部分的几个概念,即Logger、Handler 及 Formatter。

    • Logger:日志记录器,是应用程序中能直接使用的接口
    • Handler:日志处理器,用以表明将日志保存到什么地方以及保存多久
    • Formatter:格式化,用以配置日志的输出格式

    在典型的使用场景中,一个日志记录器使用一个日志处理器,一个日志处理器使用一个日志格式化。

    PS:对于比较复杂的项目,我们可以将日志的配置保存到一个配置文件中,然后在代码中使用fileConfig函数来读取配置文件。

    # 日志配置文件logging.cnf
    
    [loggers]
    keys = root
    
    [handlers]
    keys = logfile
    
    [formatters]
    keys = generic
    
    [logger_root]
    handlers = logfile
    
    [handler_logfile]
    class = handlers.TimeRotatingFileHandler
    args = ('app.log','midnight',1,10)
    level = DEBUG
    formater = generic
    
    [formatter_generic]
    format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s
    

      在这个日志配置文件中,我们首先在[loggers]中声明一个名为root的logger,在[handlers]中声明一个名为logfile的handler,并在[formatters]中声明一个名为generic的formatter。然后我们在[logger_root]中定义root这个logger所使用的handler,在[handler_logfile]中定义handler输出日志的方式、日志文件的切换时间等,最后在[formatter_generic]中定义了日志的格式,包括日志的产生时间、日志级别、产生日志的文件名以及行号的信息。

      有了配置文件,那么我们只需要使用logConfig函数进行配置的加载,然后就可以记录日志了。

    import logging.config
    
    logging.config.fileConfig('logging.cnf')   # 加载配置文件
     
    logging.debug('this is debg')
    logging.info('this is info')
    logging.warning('this is warn')
    logging.error('this is err')
    logging.critical('this is cri')
    

     

  • 相关阅读:
    Web_0002:关于MongoDB的操作
    JN_0008:win下通过cmd进入指定目录
    H5_0008:链接分享图片和判断平台
    H5_0007:使用base64做为背景图片
    JN_0007:微信昵称设置小数字
    H5_0006:JS判断PC,平板,手机平台的方法
    H5_0002:微信分享设置
    Web_0001:关于阿里云防盗链Referer,CDN加速,OSS自定义域名的操作
    H5_0001:localStorage本地存储
    JN_0006:MongoDB未授权访问漏洞处理
  • 原文地址:https://www.cnblogs.com/dachenzi/p/7990174.html
Copyright © 2011-2022 走看看