zoukankan      html  css  js  c++  java
  • logging模块

    logging

    函数式简单配置

    import logging  
    logging.debug('debug message')                  #调试模式
    logging.info('info message')                          #信息模式
    logging.warning('warning message')             #警告模式        (默认模式)
    logging.error('error message')                      #错误模式
    logging.critical('critical message')                #批判模式           (从上到下,级别依次增高)
    
    打印结果:
    WARNING:root:warning message
    ERROR:root:error message
    CRITICAL:root:critical message
    Logger名字:消息

    默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL >

    ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

    简单配置:

    import logging
    try:
        s = input("num:")
        int(s)
    except:
        logging.error("输入的不是数字")
    else:
        print('没错打印我')

    高级配置: 对象配置的模式

      通过logging.basicConfig函数对日志的输出格式及方式做相关配置

    灵活配置日志级别,日志格式,输出位置:

    import logging
    logging.basicConfig(level=logging.DEBUG,           #basicConfig() 各参数  #level设定日志级别
                        at='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',   #输出的格式和内容
                        datefmt='%a, %d %b %Y %H:%M:%S',   #指定日期时间格式
                        filename='/tmp/test.log',          #指定日志文件名,用于创建FiledHandler,把文件存储到指定文件中,没有则输出到屏幕
                        filemode='w')                  #文件打开方式(前提是指定了filename),默认为'a',可以指定'w'     
    -------------------------  
    logging.debug('debug message')  
    logging.info('info message')  
    logging.warning('warning message')  
    logging.error('error message')  
    logging.critical('critical message')

    配置参数:

    logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

    filename:# 用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
    filemode:# 文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    at:# 指定handler使用的日志显示格式。
    datefmt:# 指定日期时间格式。
    level:# 设置rootlogger(后边会讲解具体概念)的日志级别
    stream:# 屏幕流,输出到屏幕
           # 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout # 或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。
           # 若filename和stream同时存在,stream被忽略。

    at参数中可能用到的格式化串:

    %(name)s  # Logger的名字
    %(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 # 用户输出的消息

    ====

    import logging
    
    
    #1.实例化一个logger对象
    log_obj = logging.getLogger()
    
    
    #2.设置日志等级
    log_obj.setLevel(logging.DEBUG)  #设置日志等级,默认是Warning,此处设置DEBUG等级
    
    
    #3.创建文件句柄(handler),用于(写入日志文件 或 输出到屏幕)
    fh = logging.FileHandler('test.log',encoding='utf-8')  #写入文件 #文件句柄-日志文件操作符
    sh = logging.StreamHandler()                           #屏幕流对象, 输出到屏幕(控制台)
    
    
    #4.设置输出格式
    f_m1 = logging.atter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #日志输出格式
    f_m2 = logging.atter('%(asctime)s - %(name)s  [%(levelname)s]  %(message)s') #日志输出格式
    
    
    #5.文件或屏幕绑定输出格式
    fh.setatter(f_m1)   #文件句柄 绑定 输出格式
    sh.setatter(f_m2)   #屏幕    绑定 输出格式
    
    
    #6.日志对象文件或屏幕
    log_obj.addHandler(fh)      #logger 绑文件句柄
    log_obj.addHandler(sh)      #logger对象可以添加多个 文件或屏幕对象
    
    
    #7.要输出的日志对象结果(属性)
    log_obj.info('hello!')

     文件截断:

    import logging
    from logging.handlers import RotatingFileHandler
    
    logger = logging.getLogger(__name__)
    logger.setLevel(level=logging.INFO)  # logging级别
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
    rHandler = RotatingFileHandler("log.txt", maxBytes=1 * 1024, backupCount=3, encoding="utf-8")
    rHandler.setLevel(logging.ERROR)  # 日志文件级别
    rHandler.setFormatter(formatter)
    
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)  # 控制台输出级别
    console.setFormatter(formatter)
    
    logger.addHandler(rHandler)
    logger.addHandler(console)
    
    logging.debug('debug message')  # 调试模式
    logging.info('info message')  # 信息模式
    logging.warning('warning message')  # 警告模式        (默认模式)
    logging.error('error message')  # 错误模式
    logging.critical('critical message')  # 批判模式           (从上到下,级别依次增高)
  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/9295790.html
Copyright © 2011-2022 走看看