Python3自定義日志類 mylog


#encoding=utf-8

import os, sys
import datetime
import time


class Mylog(object):

    # 根文件夾
    root_dir = sys.path[0]
    # 根目錄
    root_path = sys.path[0] + os.path.sep
    # 系統目錄分割線
    sys_sep = os.path.sep
    # 配置
    option = {
        # 日志級別:  0:全部,1:調試,2:警告,3:錯誤
        'level': 0,
        # 是否開啟,如果關閉則不輸出也不記錄日志
        'is_open': True,
        # 是否print輸出
        'is_print': True,
        # 是否記錄到日志文件
        'is_write': True,
        # 是否在每條日志內容前面加前綴
        'is_prefix': True,
        # 如果開啟了每條日志前加前綴,設置日志級別為1的前綴
        'level_1_prefix': 'Test: ',
        # 如果開啟了每條日志前加前綴,設置日志級別為2的前綴
        'level_2_prefix': 'Warning: ',
        # 如果開啟了每條日志前加前綴,設置日志級別為3的前綴
        'level_3_prefix': 'Error: ',
        # 存放日志文件的根文件夾名稱
        'root_dir_name': 'mylog',
        # 自定義存放日志文件的文件名稱,此文件夾是在 root_dir_name 文件夾下
        'dir_name': ''
    }

    def __init__(self, config=None):
        if config is not None:
            self.option.update(dict(config))

        # 日志保存的文件夾(全路徑)
        save_dir = self.root_path + self.option['root_dir_name']

        # 創建文件夾
        if os.path.isdir(save_dir) is not True:
            os.mkdir(save_dir)
        if len(self.option['dir_name']) > 0:
            save_dir += self.sys_sep + self.option['dir_name']
            if os.path.isdir(save_dir) is not True:
                os.mkdir(save_dir)

        self.save_dir = save_dir
        self.save_path = save_dir + self.sys_sep

    '''
    輸入日志/記錄日志
    '''
    def log(self, content='', level=0):
        self._print_log(content, level)
        self._write_log(content, level)

    '''
    輸入日志
    '''
    def _print_log(self, content, level):
        if self.option['is_open'] is True and self.option['is_print'] is True:
            if self.option['level'] == 0 or self.option['level'] == level:
                if level > 0:
                    content = self.option['level_' + str(level) + '_prefix'] + content
                print(content)

    '''
    記錄日志
    '''
    def _write_log(self, content, level):
        if self.option['is_open'] is True and self.option['is_print'] is True:
            if self.option['level'] == 0 or self.option['level'] == level:
                if self.option['is_prefix'] is True:
                    today = datetime.date.today()
                    file_name = str(today) + '.log'
                    now = time.strftime("%H:%M:%S")
                    log_file = self.save_path + file_name
                    if level > 0:
                        content = self.option['level_' + str(level) + '_prefix'] + content
                    if os.path.isfile(log_file):
                        save_file = open(log_file, 'a')
                    else:
                        save_file = open(log_file, 'w')
                    save_file.write(str(now) + "\r\n" + content + "\r\n")
                    save_file.close()

 

**重點內容
#!/usr/bin/env python
#-*- coding: GBK -*-
__author__ = 'DiaoHuabin'

import logging
import getpass
import sys

#定義MyLog類
class MyLog(object):
    '''這個類用於創建一個自用的log'''
    def __init__(self):  #類MyLog的構造函數
        user = getpass.getuser()  #返回用戶的登錄名
        self.logger = logging.getLogger(user)  #返回一個特定名字的日志
        self.logger.setLevel(logging.DEBUG)   #對顯示的日志信息設置一個閾值低於DEBUG級別的不顯示
        logFile = './'+sys.argv[1][0:-3] + '.log'  # 日志文件名
        formatter = logging.Formatter('%(asctime)-12s $(levelname)-8s %(name)-10s %(message)-12s')

        '''日志顯示到屏幕上並輸出到日志文件內'''
        logHand = logging.FileHandler(logFile)  #輸出日志文件,文件名是logFile
        logHand.setFormatter(formatter)  #為logHand以formatter設置格式
        logHand.setLevel(logging.ERROR) #只有錯誤才被記錄到logfile中

        logHandSt = logging.StreamHandler() #class logging.StreamHandler(stream=None)
        # 返回StreamHandler類的實例,如果stream被確定,使用該stream作為日志輸出,反之,使用
        #sys.stderr
        logHandSt.setFormatter(formatter) #為logHandSt以formatter設置格式

        self.logger.addHandler(logHand) #添加特定的handler logHand到日志文件logger中
        self.logger.addHandler(logHandSt) #添加特定的handler logHandSt到日志文件logger中

        '''日志的5個級別對應以下的五個函數'''
    def debug(self,msg):
        self.logger.debug(msg)  #Logs a message with level DEBUG on this logger.
        # The msg is the message format string

    def info(self,msg):
        self.logger.info(msg)

    def warn(self,msg):
        self.logger.warn(msg)

    def error(self,msg):
        self.logger.error(msg)

    def critical(self,msg):
        self.logger.critical(msg)

if __name__ == '__main__':
    mylogw = MyLog()
    mylogw.debug("I'm debug")
    mylogw.info("I'm info")
    mylogw.warn("I'm warn")
    mylogw.error("I'm error")
    mylogw.critical("I'm critical")


寫圖片描述

 


這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM