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")
原文地址:https://www.cnblogs.com/Henry-ZHAO/p/13678071.html