日志一共分成5个等级,从低到高分别是:
说明:
这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪。
有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件。
比如,log1.py 如下:
import logging  
logging.basicConfig(level=logging.WARNING,  
                    format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘)  
# 开始使用log功能
logging.info(‘这是 loggging info message‘)  
logging.debug(‘这是 loggging debug message‘)  
logging.warning(‘这是 loggging a warning message‘)  
logging.error(‘这是 an loggging error message‘)  
logging.critical(‘这是 loggging critical message‘)
运行结果
2018-9-08 20:07:35,725 - log1.py[line:9] - WARNING: 这是 loggging a warning message
2018-9-08 20:07:35,725 - log1.py[line:10] - ERROR: 这是 an loggging error message
2018-9-08 20:07:35,725 - log1.py[line:11] - CRITICAL: 这是 loggging critical message
通过logging.basicConfig函数对日志的输出格式及方式做相关配置,上面代码设置日志的输出等级是WARNING级别,意思是WARNING级别以上的日志才会输出。另外还制定了日志输出的格式。
注意,只要用过一次log功能再次设置格式时将失效,实际开发中格式肯定不会经常变化,所以刚开始时需要设定好格式
我们还可以将日志输出到文件,只需要在logging.basicConfig函数中设置好输出文件的文件名和写文件的模式。
log2.py 如下:
import logging  
logging.basicConfig(level=logging.WARNING,  
                    filename=‘./log.txt‘,  
                    filemode=‘w‘,  
                    format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘)  
# use logging  
logging.info(‘这是 loggging info message‘)  
logging.debug(‘这是 loggging debug message‘)  
logging.warning(‘这是 loggging a warning message‘)  
logging.error(‘这是 an loggging error message‘)  
logging.critical(‘这是 loggging critical message‘)
运行效果
python@ubuntu: cat log.txt 
2018-9-08 20:10:44,549 - log2.py[line:10] - WARNING: 这是 loggging a warning message
2018-9-08 20:10:44,549 - log2.py[line:11] - ERROR: 这是 an loggging error message
2018-9-08 20:10:44,549 - log2.py[line:12] - CRITICAL: 这是 loggging critical message
这就需要一个叫作Logger 的对象来帮忙,下面将对他进行详细介绍,现在这里先学习怎么实现把日志既要输出到控制台又要输出到文件的功能。
import logging  
# 第一步,创建一个logger  
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  # Log等级总开关  
# 第二步,创建一个handler,用于写入日志文件  
logfile = ‘./log.txt‘  
fh = logging.FileHandler(logfile, mode=‘a‘)  # open的打开模式这里可以进行参考
fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关  
# 第三步,再创建一个handler,用于输出到控制台  
ch = logging.StreamHandler()  
ch.setLevel(logging.WARNING)   # 输出到console的log等级的开关  
# 第四步,定义handler的输出格式  
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")  
fh.setFormatter(formatter)  
ch.setFormatter(formatter)  
# 第五步,将logger添加到handler里面  
logger.addHandler(fh)  
logger.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‘)
运行时终端的输出结果:
2018-9-06 20:14:04,731 - log3.py[line:28] - WARNING: 这是 logger warning message
2018-9-06 20:14:04,731 - log3.py[line:29] - ERROR: 这是 logger error message
2018-9-06 20:14:04,731 - log3.py[line:30] - CRITICAL: 这是 logger critical message
在log.txt中,有如下数据:
2018-9-06 20:14:04,731 - log3.py[line:27] - INFO: 这是 logger info message
2018-9-06 20:14:04,731 - log3.py[line:28] - WARNING: 这是 logger warning message
2018-9-06 20:14:04,731 - log3.py[line:29] - ERROR: 这是 logger error message
2018-9-06 20:14:04,731 - log3.py[line:30] - CRITICAL: 这是 logger critical message
logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如下:
在工作中给的常用格式如下:
format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘
这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。
原文:https://www.cnblogs.com/skaarl/p/9610234.html