一个可以直接使用的用于python日志记录的类

一个用于Python3程序的日志记录类,使用的时候,将该类import进去后,按照这里面的最后两行的测试程序使用即可。程序贴在这里,省的以后造轮子。

Github:https://github.com/tomeasure/Logger-py/tree/master

更新:使用了一个自定义的FileHandler类。
功能说明
根据指定的文件名,创建一个符号链接,指向当前时间的日志文件。
举例来说

$ ls log/
test_log.log -> test_log.log.2019060611
test_log.log.2019060610
test_log.log.2019060611
  • 代码:
#! encoding=utf-8

import logging
import time
import os

class MyFileHandler(logging.FileHandler):
    def __init__(self, filename, mode='a', encoding=None, delay=0):
        #self.__timeformat__ = "%Y%m%d%H%M"
        self.__timeformat__ = "%Y%m%d%H"
        self.rawFilename = filename
        self.latestTime = time.strftime(self.__timeformat__, time.localtime())
        self.filename = "%s.%s" % ( filename, self.latestTime )
        self.mode = mode
        self.encoding = encoding
        self.delay = delay
        self.baseFilename = os.path.abspath(self.filename)
        self.__createFile()
        super(MyFileHandler, self).__init__(self.rawFilename, mode, encoding, delay)
    def close(self):
        logging.FileHandler.close(self)
    def _open(self):
        return logging.FileHandler._open(self)
    def emit(self, record):
        currentTime = time.strftime(self.__timeformat__, time.localtime())
        if currentTime != self.latestTime:
            self.latestTime = currentTime
            self.filename = "%s.%s" % (self.rawFilename, self.latestTime)
            self.__createFile()
        logging.FileHandler.emit(self, record)
    def __createFile(self):
        if not os.path.exists(self.filename):
            with open(self.filename, "w") as fout:
                pass
        self.baseFilename = os.path.abspath(self.filename)
        if not os.path.exists(self.rawFilename):
            os.symlink(self.baseFilename, self.rawFilename)
        elif not os.path.islink(self.rawFilename):
            os.remove(self.rawFilename)
            os.symlink(self.baseFilename, self.rawFilename)
        elif os.path.realpath(self.rawFilename).split(".")[0] != self.filename.split(".")[0]:
            os.remove(self.rawFilename)
            os.symlink(self.baseFilename, self.rawFilename)
            self.stream = super(MyFileHandler, self)._open()

class Logger():
    def __init__(self, logname):
        '''
           指定保存日志的文件
           将日志存入到该文件中
        '''
        # 创建一个logger
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        # 创建一个handler,用于写入日志文件
        #fh = logging.FileHandler(logname)
        fh = MyFileHandler(logname)
        fh.setLevel(logging.DEBUG)
        # 定义handler的输出格式
        string = '[%(levelname)s %(asctime)s %(process)d %(pathname)s:%(lineno)d %(funcName)s] %(message)s'
        formatter = logging.Formatter(string)
        fh.setFormatter(formatter)
        # 给logger添加handler
        self.logger.addHandler(fh)
    def createLogger(self):
        return self.logger

def getLogger(logname):
    logger = Logger(logname)
    return logger.createLogger()

def testLogger1():
    logger.warning("ceshi")

def testLogger2():
    logger.warning("这是一个简单的测试")
    logger.warning("这是一个简单的测试")


if __name__ == "__main__":
    # 程序将会被记录在文件 testfile.log 中
    #logger = Logger(logname='testfile.log').createLogger()
    logger = getLogger("log/testfile.log")
    for i in range(180):
        testLogger1()
        testLogger2()
        time.sleep(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值