python实现的系统实用log类实例

613次阅读  |  发布于5年以前

本文实例讲述了python实现的系统实用log类。分享给大家供大家参考。具体如下:

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

文件名:logger.py


    """This module takes care of the logging
    logger helps in creating a logging system for the application 
    Logging is initialised by function LoggerInit.
    """
    import logging
    import os
    import sys
    class 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

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8