【进阶13】【自学笔记】Python logging模块封装
一、定义
Python logging模块是一个可以通过控制日志级别、输出位置等方式来实现记录日志的模块。
logger对象的不同方法来记录不同级别的日志。
其中,debug()方法用于记录debug级别的日志,info()方法用于记录info级别的日志,warning()方法用于记录warning级别的日志,error()方法用于记录error级别的日志,critical()方法用于记录critical级别的日志。
日志级别从低到高分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL。
二、代码示例
# -*- coding: utf-8 -*-
"""
封装log方法
"""
import logging
import os
import time
#
#定义日志等级
LEVELS = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
logger = logging.getLogger(__name__) #定义记录器,使用 __name__ 作为记录器名称。
level = 'default'
def create_file(filename):
"""
判断目录是否存在,不存在创建目录
"""
path = filename[0:filename.rfind('/')]
if not os.path.isdir(path):
os.makedirs(path)
if not os.path.isfile(filename):
fd = open(filename, mode='w', encoding='utf-8')
fd.close()
else:
pass
#输出日志到文件的处理器(Handler)
def set_handler(levels):
if levels == 'error':
logger.addHandler(MyLog.err_handler)
logger.addHandler(MyLog.handler)
#删除到日志文件处理器
def remove_handler(levels):
if levels == 'error':
logger.removeHandler(MyLog.err_handler)
logger.removeHandler(MyLog.handler)
def get_current_time():
return time.strftime(MyLog.date, time.localtime(time.time()))
class MyLog:
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
log_file = path+'/Log/log.log'
err_file = path+'/Log/err.log'
#setLevel 方法来设置日志记录器(Logger)的记录等级(Level),其中 level 是指定的日志等级名称。
logger.setLevel(LEVELS.get(level, logging.NOTSET))
create_file(log_file)
create_file(err_file)
date = '%Y-%m-%d %H:%M:%S'
#将文件处理器设置为一个变量进行接受
handler = logging.FileHandler(log_file, encoding='utf-8')
err_handler = logging.FileHandler(err_file, encoding='utf-8')
@staticmethod
def debug(log_meg):
set_handler('debug')
logger.debug("[DEBUG " + get_current_time() + "]" + log_meg)
remove_handler('debug')
@staticmethod
def info(log_meg):
set_handler('info')
logger.info("[INFO " + get_current_time() + "]" + log_meg)
remove_handler('info')
@staticmethod
def warning(log_meg):
set_handler('warning')
logger.warning("[WARNING " + get_current_time() + "]" + log_meg)
remove_handler('warning')
@staticmethod
def error(log_meg):
set_handler('error')
logger.error("[ERROR " + get_current_time() + "]" + log_meg)
remove_handler('error')
@staticmethod
def critical(log_meg):
set_handler('critical')
logger.error("[CRITICAL " + get_current_time() + "]" + log_meg)
remove_handler('critical')
if __name__ == "__main__":
MyLog.debug("This is debug message")
MyLog.info("This is info message")
MyLog.warning("This is warning message")
MyLog.error("This is error")
MyLog.critical("This is critical message")
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/17327688.html

浙公网安备 33010602011771号