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程序设计有所帮助。