logging
控制台与文件都输出日志,采用当前时间命名日志文件
示例
import logging
import time
import os
class MyLogger:
def __init__(self):
# 定义记录器
self.logger = logging.getLogger()
# 这是记录器级别
self.logger.setLevel(logging.DEBUG)
# 控制台输出器
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
# 文件名
file_name = "{}.log".format(time.strftime("%Y-%m-%d"))
# 获取当前文件目录
file_path = os.path.dirname(__file__)
file_path = os.path.join(file_path, "..", "log") # 当前文件的上级目录有无名为log的文件夹
if not os.path.isdir(file_path):
os.makedirs(file_path) # 创建该目录
# 文件输出器
fh = logging.FileHandler(filename=os.path.join(file_path, file_name), encoding="utf-8")
fh.setLevel(logging.INFO)
# 设置日志的输出格式
fm = logging.Formatter("%(asctime)s|%(levelname)s|%(filename)s|%(lineno)s|%(message)s|")
# 将格式添加给输出器
sh.setFormatter(fm)
fh.setFormatter(fm)
# 把输出器添加到记录器里
self.logger.addHandler(sh)
self.logger.addHandler(fh)
logger = MyLogger().logger使用
from myLogger import logger # 自己的文件在哪就写哪里
logger.info("这是一条普通日志")
logger.warning("这是一条警告日志")
logger.error("这是一条错误日志")错误等级对照表
| 级别 | 数值 | 描述 | 典型使用场景 |
|---|---|---|---|
| NOTSET | 0 | 未设置级别(继承父Logger的级别) | 一般不直接使用 |
| DEBUG | 10 | 调试信息,记录详细运行流程 | 开发阶段排查问题 |
| INFO | 20 | 常规信息,记录程序正常运行状态 | 服务启动、配置加载成功 |
| WARNING | 30 | 警告信息,表明潜在问题(不影响程序运行) | 磁盘空间不足、参数缺省值替换 |
| ERROR | 40 | 错误信息,程序部分功能失效 | 数据库连接失败、文件解析错误 |
| CRITICAL | 50 | 严重错误,程序可能崩溃 | 系统关键资源耗尽、主线程退出 |
评论 (0)