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

    import logging
    logging.basicConfig(level=logging.DEBUG,#输出级别限制
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',#星期,月,日,年,时,分,秒
                        filename='/tmp/test.log',
                        filemode='w')#文件的默认打开方式是"a",追加写入
     
    logging.debug('debug message')-----级别是用数值定义的,10
    logging.info('info message')---20
    logging.warning('warning message')----30
    logging.error('error message')----40
    logging.critical('critical message')---50
    
    """
    Mon, 05 May 2014 16:29:53 test_logging.py[line:9] DEBUG debug message
    Mon, 05 May 2014 16:29:53 test_logging.py[line:10] INFO info message
    Mon, 05 May 2014 16:29:53 test_logging.py[line:11] WARNING warning message
    Mon, 05 May 2014 16:29:53 test_logging.py[line:12] ERROR error message
    Mon, 05 May 2014 16:29:53 test_logging.py[line:13] CRITICAL critical message
    
    默认情况下python的logging模块将调用root_handler默认将日志打印到标准输出stdout---控制台IO。
    默认输出的日志级别设置为WARNING
    默认的日志格式为   日志级别:Logger名称:用户输出消息。
    
    
    logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    
     filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
     filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
     format:指定handler使用的日志显示格式。
     datefmt:指定日期时间格式。
     level:设置rootlogger(后边会讲解具体概念)的日志级别
     stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
        
    """
    
    #coding:utf-8
    import logging
     
    # 创建一个logger  
    logger = logging.getLogger()
     
    logger1 = logging.getLogger('mylogger')
    logger1.setLevel(logging.DEBUG)
     
    logger2 = logging.getLogger('mylogger')
    logger2.setLevel(logging.INFO)
     
    # 可以将handler理解为输出控制器
    # foramtter是给handler用的,handler才是实际最终的输出控制。我们需要定义handler类型及格式,然后将handler附加到logger上来做到控制日志输出。
    # handler有很多种,如StreamHandler()--->标准输出控制器(控制台),FileHandler---->写u人日志文件输出控制器
    
    
    # 创建一个handler,用于写入日志文件  
    fh = logging.FileHandler('/tmp/test.log')
     
    # 再创建一个handler,用于输出到控制台  
    ch = logging.StreamHandler()
     
    # 定义handler的输出格式formatter  
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
     
    #定义一个filter。
    #filter可以附加到logger也可以附加到handler,显然是附加到handler会直接影响最终的输出。
    #filter = logging.Filter('mylogger.child1.child2')
    #fh.addFilter(filter)  
     
    # 给logger添加handler  
    #logger.addFilter(filter)
    logger.addHandler(fh)
    logger.addHandler(ch)
     
    #logger1.addFilter(filter)
    logger1.addHandler(fh)
    logger1.addHandler(ch)
     
    logger2.addHandler(fh)
    logger2.addHandler(ch)
     
     
    # 记录一条日志  
    logger.debug('logger debug message')
    logger.info('logger info message')
    logger.warning('logger warning message')
    logger.error('logger error message')
    logger.critical('logger critical message')
     
    logger1.debug('logger1 debug message')
    logger1.info('logger1 info message')
    logger1.warning('logger1 warning message')
    logger1.error('logger1 error message')
    logger1.critical('logger1 critical message')
     
    logger2.debug('logger2 debug message')
    logger2.info('logger2 info message')
    logger2.warning('logger2 warning message')
    logger2.error('logger2 error message')
    logger2.critical('logger2 critical message')
    
    #利用logging模块加上字符串处理,可以很方便观测代码的运行,如if...logging.info(...)
    
    # 利用配置文件,配置logger设置
    # logging.conf配置文件内容如下:
    """
    [loggers]
    keys=root,simpleExample
     
    [handlers]
    keys=consoleHandler
     
    [formatters]
    keys=simpleFormatter
     
    [logger_root]
    level=DEBUG
    handlers=consoleHandler
     
    [logger_simpleExample]
    level=DEBUG
    handlers=consoleHandler
    qualname=simpleExample
    propagate=0
     
    [handler_consoleHandler]
    class=StreamHandler
    level=DEBUG
    formatter=simpleFormatter
    args=(sys.stdout,)
    [formatter_simpleFormatter]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
    datefmt=
    """
    
    # 如下应用
    import logging  
    import logging.config  
      
    logging.config.fileConfig("logging.conf")    # 采用配置文件   
      
    # create logger   
    logger = logging.getLogger("simpleExample")  
      
    # "application" code   
    logger.debug("debug message")  
    logger.info("info message")  
    logger.warn("warn message")  
    logger.error("error message")  
    logger.critical("critical message")
    
  • 相关阅读:
    学习认识Spring原理
    JavaScript
    JSP----九大内置对象
    人到底可以有怎样的意志力,人到底可能有怎样的发挥潜力? ----问自己
    将web项目打成war包部署在tomcat步骤
    微信企业公众号开发之回调模式
    eclipse/myeclipse 中的一些常用的快捷键
    mycelipse中关于编码的配置
    Ext学习系列(1)初识Ext
    AngularJs编写指令
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/13678071.html
Copyright © 2011-2022 走看看