Python 日志
import logging
# 记录器
# 处理器
# 格式化器
# 处理器绑定格式化
# 记录器绑定处理器
def log():
logger = logging.getLogger('applog')
# 如果记录器没有处理器就执行以下代码
if not logger.hasHandlers():
# 设置记录器的日志级别,记录器默认的级别是waring,如果不设置为debug,就算给处理器设置了日志级别为debug也不会生效
logger.setLevel(logging.DEBUG)
# 添加控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 添加文件处理器,默认是追加模式
file_handler = logging.FileHandler('app.log','w')
file_handler.setLevel(logging.INFO)
#添加格式化器,-8s 向左对齐占8位
formator = logging.Formatter('%(levelname)-8s %(asctime)s %(module)s %(lineno)d %(message)s',datefmt='%Y-%m-%d %H:%M:%S')
#处理器绑定格式化器
console_handler.setFormatter(formator)
file_handler.setFormatter(formator)
#记录器绑定处理器
logger.addHandler(console_handler)
logger.addHandler(file_handler)
return logger
test = log()
test.debug('this is debug')
test.info('this is info')
test.warning('this is warning')
test.error('this is error')
test.critical('this is critical')
创建一个单实例模式的logger对象
import logging
class MyLog:
__is_instance = None
__is_flag = False
__logger = None
def __new__(cls, *args, **kwargs):
if cls.__is_instance is None:
cls.__is_instance = super().__new__(cls)
return cls.__is_instance
def __init__(self, file):
if not MyLog.__is_flag:
self.file = file
# 创建记录器
logger = logging.getLogger("my_log")
logger.setLevel(logging.DEBUG)
# 创建控制台处理器
control_handler = logging.StreamHandler()
# 创建文件记录器
file_handler = logging.FileHandler(self.file, mode='w', encoding='utf-8')
# 创建格式化器
formatter = logging.Formatter('%(levelname)-8s %(filename)s %(funcName)s %(asctime)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# 处理器绑定格式化器
control_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 记录器绑定处理器
logger.addHandler(control_handler)
logger.addHandler(file_handler)
MyLog.__is_flag = True
# 把logger赋值给类属性
MyLog.__logger = logger
# 通过属性的方式来访问
@property
def logger(self):
return self.__logger
m = MyLog('../log/run.log')
n = MyLog('../log/run1.log') # 和上面的是同一个id
m.logger.info("aaa")
m.logger.info("bbb")
n.logger.info("ccc")
n.logger.debug("en")
n.logger.warning("en")
本文来自博客园,作者:弩哥++,转载请注明原文链接:https://www.cnblogs.com/bangbangzoutianya/p/15169971.html