python操作日志的封装方法(两种方法)
前言
今天就简单的对日志做个封装,实际工作中直接拿去用吧
方法1
""" ------------------------------------ @Time:2019/5/228:12 @Auth:linux超 @File:logfile.py @IDE:PyCharm @Motto:Realwarriors,daretofacethebleakwarning,daretofacetheincisiveerror! ------------------------------------ """ importlogging classLog(object): def__init__(self,name=__name__,path='mylog.log',level='DEBUG'): self.__name=name self.__path=path self.__level=level self.__logger=logging.getLogger(self.__name) self.__logger.setLevel(self.__level) def__ini_handler(self): """初始化handler""" stream_handler=logging.StreamHandler() file_handler=logging.FileHandler(self.__path,encoding='utf-8') returnstream_handler,file_handler def__set_handler(self,stream_handler,file_handler,level='DEBUG'): """设置handler级别并添加到logger收集器""" stream_handler.setLevel(level) file_handler.setLevel(level) self.__logger.addHandler(stream_handler) self.__logger.addHandler(file_handler) def__set_formatter(self,stream_handler,file_handler): """设置日志输出格式""" formatter=logging.Formatter('%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]' '-%(levelname)s-[日志信息]:%(message)s', datefmt='%a,%d%b%Y%H:%M:%S') stream_handler.setFormatter(formatter) file_handler.setFormatter(formatter) def__close_handler(self,stream_handler,file_handler): """关闭handler""" stream_handler.close() file_handler.close() @property defLogger(self): """构造收集器,返回looger""" stream_handler,file_handler=self.__ini_handler() self.__set_handler(stream_handler,file_handler) self.__set_formatter(stream_handler,file_handler) self.__close_handler(stream_handler,file_handler) returnself.__logger if__name__=='__main__': log=Log(__name__,'file.log') logger=log.Logger logger.debug('Iamadebugmessage') logger.info('Iamainfomessage') logger.warning('Iamawarningmessage') logger.error('Iamaerrormessage') logger.critical('Iamacriticalmessage')
初始化方法参数说明
name:自定义日志的名字,默认是root,但是我这里是使用调用文件的__name__作为默认名字
path:生成的日志的文件名
level:日志的级别,我这里把所有的级别都默认设置了level=DEBUG
方法2
使用logging.fileconfig这个模块实现(不知道这个模块的找度娘恶补一下把)
1.使用配置文件构造日志配置信息
logger.ini
[loggers] keys=root,example01,example02 [logger_root] level=DEBUG handlers=hand01,hand02 [logger_example01] handlers=hand01,hand02 qualname=example01 propagate=0 [logger_example02] handlers=hand01,hand03 qualname=example02 propagate=0 [handlers] keys=hand01,hand02,hand03 [handler_hand01] class=StreamHandler level=INFO formatter=form01 args=(sys.stdout,) [handler_hand02] class=FileHandler level=DEBUG formatter=form01 args=('log/test_case_log.log','a') [handler_hand03] class=handlers.RotatingFileHandler level=INFO formatter=form01 args=('log/test_case_log.log','a',10*1024*1024,3) [formatters] keys=form01,form02 [formatter_form01] format=%(asctime)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[LogInfoMessage]:%(message)s datefmt=%a,%d%b%Y%H:%M:%S [formatter_form02] format=%(name)-12s:%(levelname)-8s-[日志信息]:%(message)s datefmt=%a,%d%b%Y%H:%M:%S
封装python代码
""" ------------------------------------ @Time:2019/5/229:37 @Auth:linux超 @File:Log.py @IDE:PyCharm @Motto:Realwarriors,daretofacethebleakwarning,daretofacetheincisiveerror! ------------------------------------ """ importlogging fromloggingimportconfig classMyLog(object): def__init__(self): config.fileConfig('logger.ini') self.logger=logging.getLogger('example01') @property defmy_logger(self): returnself.logger if__name__=='__main__': log=MyLog() log.my_logger.info('itismytestlogmessageinfo')
总结
两种方法各有好处吧
第一种代码很好理解思路清晰,但是不利于项目都维护,比如日志文件名,日志格式等无法修改,只能通过代码内部修改
第二种其实是使用config模块内部使用配置文件操作模块ConfigParser做了封装,用配置文件来构造自定义日志器,好处很明显,我们只要通过修改配置文件就能修改日志的格式,名字,级别等等一些设置,无需改动代码,而且使用很简单,其实这种方法完全不需要封装一个python代码,哪个模块需要输出日志,直接调用config模块获得logger就可以了(就是上面文件的那几行代码),今天就到这吧......
以上所述是小编给大家介绍的python操作日志的封装方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!