1. 程式人生 > >Python實現日誌檔案寫入或者列印--類似於Java的Log4j

Python實現日誌檔案寫入或者列印--類似於Java的Log4j

開發過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