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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」