Python實現日誌檔案寫入或者列印--類似於Java的Log4j
阿新 • • 發佈:2019-01-28
開發過Java的應該都知道Log4j的重要性,尤其是在開發測試中,能夠讓開發和測試人員方便找的bug,Python也有和Log4j相同功能的庫那就是logging庫,其功能非常強大,在開發測試中很方便,我是將其作為工具使用的,程式碼syslog.py如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/11/27 15:39 # @Desc : 系統日誌,主要用來列印測試 # @File : syslog.py # @Software: PyCharm from lxml import etree import logging.handlers import logging import os import sys # 提供日誌功能 class syslogger: # 先讀取XML檔案中的配置資料 # 由於config.xml放置在與當前檔案相同的目錄下,因此通過 __file__ 來獲取XML檔案的目錄,然後再拼接成絕對路徑 # 這裡利用了lxml庫來解析XML root = etree.parse(os.path.join(os.path.dirname(__file__), '../LogConfig.xml')).getroot() # 讀取日誌檔案儲存路徑 logpath = root.find('logpath').text # 讀取日誌檔案容量,轉換為位元組 logsize = 1024*1024*int(root.find('logsize').text) # 讀取日誌檔案儲存個數 lognum = int(root.find('lognum').text) # 日誌檔名:由用例指令碼的名稱,結合日誌儲存路徑,得到日誌檔案的絕對路徑 logname = os.path.join(logpath, sys.argv[0].split('/')[-1].split('.')[0]) # 初始化logger log = logging.getLogger() # 日誌格式,可以根據需要設定 fmt = logging.Formatter('[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') # 日誌輸出到檔案,這裡用到了上面獲取的日誌名稱,大小,儲存個數 handle1 = logging.handlers.RotatingFileHandler(logname, maxBytes=logsize, backupCount=lognum) handle1.setFormatter(fmt) # 同時輸出到螢幕,便於實施觀察 handle2 = logging.StreamHandler(stream=sys.stdout) handle2.setFormatter(fmt) log.addHandler(handle1) log.addHandler(handle2) # 設定日誌基本,這裡設定為INFO,表示只有INFO級別及以上的會列印 log.setLevel(logging.INFO) # 日誌介面,使用者只需呼叫這裡的介面即可,這裡只定位了INFO, WARNING, ERROR三個級別的日誌,可根據需要定義更多介面 @classmethod def info(cls, msg): cls.log.info(msg) return @classmethod def warning(cls, msg): cls.log.warning(msg) return @classmethod def error(cls, msg): cls.log.error(msg) return syslogger=syslogger()
其配置檔案LogConfig.xml如下:
<?xml version="1.0" encoding="utf-8"?> <!--系統日誌配置檔案--> <config> <!-- 日誌儲存路徑 --> <logpath>/home/</logpath> <!-- 每個指令碼對應的日誌檔案大小,單位MB --> <logsize>100</logsize> <!-- 每個指令碼儲存的日誌檔案個數 --> <lognum>3</lognum> </config>
若無Python logging庫,安裝命令pip install logging