在程序开发阶段,显然我们需要大量的日志。打个比方,我们的程序是一个卖东西的网站,那么关于用户关于钱的,关于商品销售等所有操作我们都应该记录下来,起码可以知道用户花了多少钱,商品销售的怎么样了。
当我们使用爬虫爬取网页时,我们通过日志,能更直观得了解到我们得爬虫爬到哪了,数据是怎样的,有没有哪里报错等等等等信息。
日志级别:
critical > error > warning > info > debug
级别越高打印的日志越少,反之亦然,
debug : 打印全部的日志
info : 打印info,warning,error,critical级别的日志
warning : 打印warning,error,critical级别的日志
error : 打印error,critical级别的日志
critical : 打印critical级别
好了,不扯蛋了,咱们开始配置日志文件吧:
import logging
import getpass
import sys
class MyLog(object):
def __init__(self):
self.user=getpass.getuser() #获取系统当前登陆用户(即系统操作用户)
self.logger=logging.getLogger(self.user) #日志对象
self.logger.setLevel(logging.DEBUG) #默认日志等级为debug级
'''定义日志文件名
sys.argv是程序执行该py文件时的路径,后面我有截图
所以这里我把路径的后缀名改成.log,其他不变,得到跟程序文件同名的日志文件
当然,你也可以设置一个自己想存放的路径,这个没有影响的
好比如我想把输出的日志文件放到我的桌面上,则改成:
self.logFile=r'C:\Users\Computer-huangbiao\Desktop\MyLog.log'就可以了
'''
self.testLogFile=sys.argv #这里用来做测试,后面有截图显示
self.logFile=sys.argv[0][0:-3]+'.log'
print('self.testLogFile:',self.testLogFile)
print('self.logFile:',self.logFile)
#关于日志的格式参数设置,大家可以参考:(https://blog.csdn.net/enjoy_endless/article/details/76214583)
self.formatter=logging.Formatter( '%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s\r\n' )
### 日志输入到日志文件内
self.logHand = logging.FileHandler( self.logFile , encoding='utf8' )
self.logHand.setFormatter( self.formatter )
self.logHand.setLevel( logging.DEBUG )
#二进制流输出到Console,这里也可以不配置,也就时不在Console上显示
self.logHandSt = logging.StreamHandler()
self.logHandSt.setFormatter( self.formatter )
self.logHandSt.setLevel(logging.DEBUG)
#把Hand加入到logger对象中
self.logger.addHandler( self.logHand )
self.logger.addHandler( self.logHandSt )
### 日志的五个级别对应下面五个函数 , 自上而下级别原来越高
def debug(self,msg):
self.logger.debug( msg )
def info(self,msg):
self.logger.info( msg )
def warn(self,msg):
self.logger.debug( msg )
def error(self,msg):
self.logger.debug( msg )
#临界的,批评的
def critical(self,msg):
self.logger.critical( msg )
if __name__=='__main__':
mylog=MyLog()
mylog.debug('I am debug 测试中文')
mylog.info('I am info ')
mylog.warn('I am warn ')
mylog.error('I am error ')
mylog.critical('I am critical 测试中文')
关于上面提到的 sys.argv的意思如下
Console面板截图:
MyLog.log截图:
当我们写好这个模块后,以后想要在其他的python程序中使用日志的话,可以直接 from MyLog import MyLog 导入哦
感谢您的阅读!