zoukankan      html  css  js  c++  java
  • 日志模块-logging模块

    日志模块 -logging(非常重要)

    • 记录用户行为
    • 程序运行过程
    • 程序错误记录
    1. logging.debug()通常调试时用到的日志信息
    2. logging.info() #证明事情按照预期的那样工作
    3. longging.warning() #表明发生了意外,或者不就得将来发生的问题(如:磁盘满了)软件还是正常的工作
    4. longging.error() #由于更严重的问题导致软件已经不能继续执行某些功能
    5. longging.critical() #严重错误,表示软件不能再继续运行下去
      • 程序默认级别在info以上

          # 使用
          #导入logging模块
          import logging
        
          logging.debug('低级别的拍错信息')	#低级别的排错信息
          logging.info('正常的信息')	#正常信息
          logging.warning('警告信息')	#警告信息
          logging.error('错误信息')	#错误信息
          logging.critical('高级别的错误信息')	#高级别错误信息
          
          #结果
          WARNING:root:警告信息
          ERROR:root:错误信息
          CRITICAL:root:高级别的错误信息
        

    简单配置

    import logging
    
    #配置logging	
    logging.basicConfig(filename='logger.log', level=logging.INFO)
    
    logging.debug('低级别的拍错信息')	#低级别的排错信息
    logging.info('正常的信息')	#正常信息
    logging.warning('警告信息')	#警告信息
    logging.error('错误信息')	#错误信息
    logging.critical('高级别的错误信息')	#高级别错误信息
    
    #结果
    当前文件路径下生成了文件logger.log
    其内容如下:
    INFO:root:正常的信息
    WARNING:root:警告信息
    ERROR:root:错误信息
    CRITICAL:root:高级别的错误信息
    
    • 因为通过level=logging.INFO设置了日志的通知级别,所以文件中打印出了INFO的信息

    basicConfig()常用配置参数

    	logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    	
    	filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
    	filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    	format:指定handler使用的日志显示格式。
    	datefmt:指定日期时间格式。
    	level:设置rootlogger(后边会讲解具体概念)的日志级别
    	stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
    	
    	format参数中可能用到的格式化串:
    	%(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用户输出的消息		
    
    • basicConfig有两个坑(缺点)
      1. 对中文的兼容问题,无法解决中文的乱码问题
      2. 不能同时往文件和屏幕输出

    利用对象的方式创建logging

    • 程序的充分解耦,让程序变得高可定制化

    • 各功能相当于绑定,功能的添加时通过对象之间的绑定

        import logging
        
        #创建一个logging对象
        logger = logging.getLogger()
        
        #创建一个logging文件对象
        fh = logging.FileHandler('text.log', encoding='utf-8', mode='a')
        
        #创建一个logging控制台对象
        sh = logging.StreamHandler()    #输出至什么地方
        
        #输出格式
        formatter = '%(asctime)s%(lineno)d'
        #创建输出格式的对象
        fm = logging.Formatter(formatter)   #设置一个格式
        
        #文件对象和控制台对象添加输出格式
        fh.setFormatter(fm) #以什么格式输出至什么地方
        sh.setFormatter(fm)
        
        #给logging对象添加
        logger.addHandler(fh)
        logger.addHandler(sh)
        
        
        logging.debug('低级别的拍错信息')	#低级别的排错信息
        logging.info('正常的信息')	#正常信息
        logging.warning('警告信息')	#警告信息
        logging.error('错误信息')	#错误信息
        logging.critical('高级别的错误信息')	#高级别错误信息
      
    • 非常灵活,自定义的程度很高,可以设定不同的输出位置和不同的格式

    • logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过logger.setLevel(logging.Debug)设置级别,当然,也可以通过
      fh.setLevel(logging.Debug)单对文件流设置某个级别

    总结

    配置方式两种

    • basicConfig()直接设置全局
      • 不兼容中文模式
      • 不能同时多位置输出
    • logging对象创建
      • 高定制,高灵活
  • 相关阅读:
    PHP 实现Word,excel等转换pdf
    ajax提交表单
    HDOJ题目2089 不要62(数位DP)
    linux中断子系统:中断号的映射与维护初始化mmap过程
    hdu 1548
    怎样高效利用GitHub(非常多资料可供下载)
    MySQL命令学习(一)
    Error-Javascript:错误:页面文档类型(DOCTYPE)未声明!
    Un-Error-ASP.NET:无法加载协定为“YlbService.MMSHServicesSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。
    故事-民间故事:《石头汤》
  • 原文地址:https://www.cnblogs.com/liliudong/p/9660663.html
Copyright © 2011-2022 走看看