自定義封裝Python3 logging模塊實現(xiàn)全局靈活配置調(diào)用

2021年1月26日17:48:44 發(fā)表評論 3,575 ℃

很多程序都有記錄日志的需求,并且日志中包含的信息即有正常的程序訪問日志,還可能有錯誤、警告等信息輸出,python的logging模塊提供了標準的日志接口,你可以通過它存儲各種格式的日志,logging的日志可以分為 debug(), info(), warning(), error() and critical()5個級別,但是內(nèi)置的logging使用不夠靈活,我們通過繼承類重新封裝logging,實現(xiàn)自定義logging模塊。

# coding:utf-8
import logging,time,logging.handlers,os
class Log(object):
    def __init__(self, logger=None):
        # 創(chuàng)建一個logger
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)
        # 創(chuàng)建一個handler,用于寫入日志文件
        self.logTime = time.strftime("%Y-%m-%d")
        self.logPath = os.path.abspath(os.path.join(os.path.dirname(__file__), './logs'))
        # 如果不存在這個logs文件夾,就自動創(chuàng)建一個
        if not os.path.exists(self.logPath):
            os.mkdir(self.logPath)
        # 日志文件的地址
        self.logName = self.logPath  + '/' + self.logTime + '.amd5.cn.log'
        # fh = logging.FileHandler(self.log_name, 'a')  # python2
        # fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8')  # python3
        fh = logging.handlers.RotatingFileHandler(
            filename=self.logName,
            maxBytes=1024 * 1024 * 50,
            backupCount=5
        )
        fh.setLevel(logging.INFO)
        # 再創(chuàng)建一個handler,用于輸出到控制臺
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)
        # 定義handler的輸出格式
        formatter = logging.Formatter(
            '[%(asctime)s] [%(filename)s]->%(funcName)s line:%(lineno)d [%(levelname)s]:%(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)
        # 給logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)
  
        # 關閉打開的文件
        fh.close()
        ch.close()
    def MyLog(self):
        return self.logger
        
if __name__ == '__main__':
    log = Log().MyLog()
    def test1():
        log.info('阿湯博客')
    def test2():
        log.error('阿湯博客地址是:http://www.zhongjima.net/')
    def test3():
        log.warning('阿湯博客地址是:http://www.zhongjima.net/,歡迎訪問!')
    test1()
    test2()
    test3()

其他頁面調(diào)用:

from test import Log
log = Log().MyLog()
def test1():
    log.info('阿湯博客')
def test2():
    log.error('阿湯博客地址是:http://www.zhongjima.net/')
def test3():
    log.warning('阿湯博客地址是:http://www.zhongjima.net/,歡迎訪問!')
test1()
test2()
test3()

日志輸出效果:

[2021-01-26 17:45:29,943] [test.py]->test1 line:56 [INFO]:阿湯博客
[2021-01-26 17:45:29,943] [test.py]->test2 line:58 [ERROR]:阿湯博客地址是:http://www.zhongjima.net/
[2021-01-26 17:45:29,944] [test.py]->test3 line:60 [WARNING]:阿湯博客地址是:http://www.zhongjima.net/,歡迎訪問!
[2021-01-26 17:45:52,539] [config.py]->test1 line:282 [INFO]:阿湯博客
[2021-01-26 17:45:52,539] [config.py]->test2 line:284 [ERROR]:阿湯博客地址是:http://www.zhongjima.net/
[2021-01-26 17:45:52,539] [config.py]->test3 line:286 [WARNING]:阿湯博客地址是:http://www.zhongjima.net/,歡迎訪問!
【騰訊云】云服務器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: