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")
寫圖片描述
這裡寫圖片描述