实现日志类

来源:互联网 发布:应用程序界面设计软件 编辑:程序博客网 时间:2024/06/14 16:43

日志对于一个程序系统来说十分重要,很多时候定位问题都要通过日志去发现并定位问题。
一般有两种日志,debug日志和error日志,一般放在根目录的/data

debug日志会打印debug和error信息,而error日志只会打印error信息。

下面是我利用logging模块实现的一个日志类,可以用于复用。

class VLogger:    def __init__(self, logDir, name):        self.logDir = logDir        self.debugFileName = '%s/%s_debug.log' % (logDir, name)        self.errorFileName = '%s/%s_error.log' % (logDir, name)        self.logger = logging.getLogger(name)        self.formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')        self.logger.setLevel(logging.DEBUG)        if not os.path.isdir(logDir):            os.mkdir(logDir)        self.debugInit(self.debugFileName)        self.errorInit(self.errorFileName)    def debugInit(self, fileName):        debug = logging.FileHandler(fileName)        debug.setLevel(logging.DEBUG)        debug.setFormatter(self.formatter)        self.logger.addHandler(debug)    def errorInit(self, fileName):        error = logging.FileHandler(fileName)        error.setLevel(logging.ERROR)        error.setFormatter(self.formatter)        self.logger.addHandler(error)

注意,日志的一个很重要又不得不面对的一个问题,就是随着日志增多,怎么去删除旧日志,或者说怎么防止日志无限增长是一个值得关注的点,可以利用如下方法:

maxBytes和backupCount由自己决定就好,我的建议是debug日志可以设置这种循环打印日志,而错误日志不设置,错误日志必须全部记录下来,等处理完后可以手动删除一些很老的错误日志(最好不)。

handler = logging.handlers.RotatingFileHandler(log_name,                                                maxBytes = 20,                                                 backupCount = 5)

于是,新的日志类如下:

# -*-coding:utf8-*-import loggingimport logging.handlersimport osclass VLogger:    def __init__(self, logDir, name):        self.logDir = logDir        self.debugFileName = '%s/%s_debug.log' % (logDir, name)        self.errorFileName = '%s/%s_error.log' % (logDir, name)        self.logger = logging.getLogger(name)        self.formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')        self.logger.setLevel(logging.DEBUG)        if not os.path.isdir(logDir):            os.mkdir(logDir)        self.debugInit(self.debugFileName)        self.errorInit(self.errorFileName)    def debugInit(self, fileName):        debug = logging.handlers.RotatingFileHandler(fileName,                                                maxBytes = 20,                                                 backupCount = 5)        #debug = logging.FileHandler(fileName)        debug.setLevel(logging.DEBUG)        debug.setFormatter(self.formatter)        self.logger.addHandler(debug)    def errorInit(self, fileName):        #error = logging.FileHandler(fileName)        error = logging.handlers.RotatingFileHandler(fileName,                                                maxBytes = 20,                                                 backupCount = 5)        error.setLevel(logging.ERROR)        error.setFormatter(self.formatter)        self.logger.addHandler(error)if __name__ == '__main__':    MDlog = VLogger('.', 'mylogtest').logger    MDlog.debug("这是debug消息1")    MDlog.debug("这是debug消息2")    MDlog.debug("这是debug消息3")    MDlog.debug("这是debug消息4")    MDlog.error("这是error消息1")    MDlog.error("这是error消息2")    MDlog.error("这是error消息3")    MDlog.error("这是error消息4")
0 0
原创粉丝点击