python实现的系统实用log类

来源:互联网 发布:湖南云计算 编辑:程序博客网 时间:2024/06/01 10:16

每个系统都必不可少会需要一个log类,方便了解系统的运行状况和排错,python本身已经提供了一个logger了,很强大,只要稍微封装一下就可以放到自己的系统了,下面是我自己的log类

文件名:logger.py

"""This module takes care of the logginglogger helps in creating a logging system for the application Logging is initialised by function LoggerInit."""import loggingimport osimport sysclass logger(object):    """Class provides methods to perform logging."""    m_logger = None        def __init__(self, opts, logfile):        """Set the default logging path."""                self.opts = opts        self.myname = 'dxscs'                self.logdir = '.'        self.logfile = logfile        self.filename = os.path.join(self.logdir, self.logfile)    def loginit(self):        """Calls function LoggerInit to start initialising the logging system."""                logdir = os.path.normpath(os.path.expanduser(self.logdir))        self.logfilename = os.path.normpath(os.path.expanduser(self.filename))        if not os.path.isdir(logdir):            try:                os.mkdir(logdir)            except OSError, e:                msg = ('(%s)'%e)                print msg                sys.exit(1)        self.logger_init(self.myname)            def logger_init(self, loggername):        """Initialise the logging system.            This includes logging to console and a file. By default, console prints        messages of level WARN and above and file prints level INFO and above.        In DEBUG mode (-D command line option) prints messages of level DEBUG        and above to both console and file.            Args:          loggername: String - Name of the application printed along with the log          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)                if self.opts['debug'] == True:            self.console.setLevel(logging.DEBUG)            self.filelog.setLevel(logging.DEBUG)            logger.m_logger.setLevel(logging.DEBUG)        if not self.opts['nofork']:            self.console.setLevel(logging.WARN)            def logstop(self):        """Shutdown logging process."""        logging.shutdown()#test        if __name__ == '__main__':    #debug mode & not in daemon    opts = {'debug':True,'nofork':True}    log = logger(opts, 'dxscs_source.log')    log.loginit()    log.m_logger.info('hello,world')

执行结果:

终端和文件中都显示有:[2012-09-06 16:56:01,498] dxscs: [logger.py: 88]: INFO    : hello,world

如果只需要显示在文件中可以将debug和nofork选项都置为false

转载请注明出处:http://blog.csdn.net/liujian0616/article/details/7951490