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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值