python实现的系统实用log类实例
本文实例讲述了python实现的系统实用log类。分享给大家供大家参考。具体如下:
每个系统都必不可少会需要一个log类,方便了解系统的运行状况和排错,python本身已经提供了一个logger了,很强大,只要稍微封装一下就可以放到自己的系统了,下面是我自己的log类
文件名:logger.py
"""Thismoduletakescareofthelogging loggerhelpsincreatingaloggingsystemfortheapplication LoggingisinitialisedbyfunctionLoggerInit. """ importlogging importos importsys classlogger(object): """Classprovidesmethodstoperformlogging.""" m_logger=None def__init__(self,opts,logfile): """Setthedefaultloggingpath.""" self.opts=opts self.myname='dxscs' self.logdir='.' self.logfile=logfile self.filename=os.path.join(self.logdir,self.logfile) defloginit(self): """CallsfunctionLoggerInittostartinitialisingtheloggingsystem.""" logdir=os.path.normpath(os.path.expanduser(self.logdir)) self.logfilename=os.path.normpath(os.path.expanduser(self.filename)) ifnotos.path.isdir(logdir): try: os.mkdir(logdir) exceptOSError,e: msg=('(%s)'%e) printmsg sys.exit(1) self.logger_init(self.myname) deflogger_init(self,loggername): """Initialisetheloggingsystem. Thisincludesloggingtoconsoleandafile.Bydefault,consoleprints messagesoflevelWARNandaboveandfileprintslevelINFOandabove. InDEBUGmode(-Dcommandlineoption)printsmessagesoflevelDEBUG andabovetobothconsoleandfile. Args: loggername:String-Nameoftheapplicationprintedalongwiththelog message. """ fileformat='[%(asctime)s]%(name)s:[%(filename)s:%(lineno)d]:%(levelname)-8s:%(message)s' logger.m_logger=logging.getLogger(loggername) logger.m_logger.setLevel(logging.INFO) self.console=logging.StreamHandler() self.console.setLevel(logging.CRITICAL) consformat=logging.Formatter(fileformat) self.console.setFormatter(consformat) self.filelog=logging.FileHandler(filename=self.logfilename,mode='w+') self.filelog.setLevel(logging.INFO) self.filelog.setFormatter(consformat) logger.m_logger.addHandler(self.filelog) logger.m_logger.addHandler(self.console) ifself.opts['debug']==True: self.console.setLevel(logging.DEBUG) self.filelog.setLevel(logging.DEBUG) logger.m_logger.setLevel(logging.DEBUG) ifnotself.opts['nofork']: self.console.setLevel(logging.WARN) deflogstop(self): """Shutdownloggingprocess.""" logging.shutdown() #test if__name__=='__main__': #debugmode¬indaemon opts={'debug':True,'nofork':True} log=logger(opts,'dxscs_source.log') log.loginit() log.m_logger.info('hello,world')
执行结果:
终端和文件中都显示有:[2012-09-0616:56:01,498]dxscs:[logger.py:88]:INFO :hello,world
如果只需要显示在文件中可以将debug和nofork选项都置为false
希望本文所述对大家的Python程序设计有所帮助。