import logging
import os
import time
class MyLogging:
"""这是一个日志收集器"""
def __init__(self, log_name, file_path, log_grade="DEBUG", output_grade="DEBUG", output="0"):
"""封装一个日志类
:param log_name: 日志收集器名字
:param file_path: 日志存放路径+日志名
:param log_grade: 定义log日志级别信息
:param output_grade: 读取输出渠道级别信息
:param output: 输出渠道
"""
self.LOG_NAME = log_name
self.file_name = file_path
self.LOG_GRADE = log_grade
self.OUTPUT_GRADE = output_grade
self.OUTPUT = output
self.my_log = logging.getLogger(self.LOG_NAME)
try:
self.my_log.setLevel(self.LOG_GRADE)
except ValueError as e:
print(f"日志收集器级别设置错误:{e}")
self.formatter = logging.Formatter("[%(asctime)s]-[%(name)s]-[%(levelname)s]-[日志信息]:%(message)s")
def file_handle(self):
"""设置文件输出渠道方法"""
self.fh = logging.FileHandler(self.file_name, encoding="utf-8")
try:
self.fh.setLevel(self.OUTPUT_GRADE)
except ValueError as e:
print(f"文件渠道级别设置错误:{e}")
self.fh.setFormatter(self.formatter)
self.my_log.addHandler(self.fh)
def stream_handler(self):
"""设置控制台输出渠道方法"""
self.ch = logging.StreamHandler()
try:
self.ch.setLevel(self.OUTPUT_GRADE)
except ValueError as e:
print(f"文件渠道级别设置错误:{e}")
self.ch.setFormatter(self.formatter)
self.my_log.addHandler(self.ch)
def print_log(self, grade, msg):
"""@grade:日志信息的级别
@msg:日志的输出信息
"""
if str(self.OUTPUT) == "0":
self.file_handle()
elif self.OUTPUT == "1":
self.stream_handler()
if grade == "DEBUG":
self.my_log.debug(msg)
elif grade == "INFO":
self.my_log.info(msg)
elif grade == "WARNING":
self.my_log.warning(msg)
elif grade == "ERROR":
self.my_log.error(msg)
elif grade == "CRITICAL":
self.my_log.critical(msg)
else:
print("日志信息级别错误")
if self.OUTPUT == "0":
self.my_log.removeHandler(self.fh)
elif self.OUTPUT == "1":
self.my_log.removeHandler(self.ch)
def debug(self, msg):
self.print_log("DEBUG", msg)
def info(self, msg):
self.print_log("INFO", msg)
def warning(self, msg):
self.print_log("WARNING", msg)
def error(self, msg):
self.print_log("ERROR", msg)
def critical(self, msg):
self.print_log("CRITICAL", msg)
log = MyLogging("chen", "debug.log", "DEBUG", "DEBUG", "1")
if __name__ == "__main__":
log.debug("最详细的日志信息")
log.info("输出一个异常信息")
log.error("输出一个错误信息")