一、导入
import logging
二、核心概念
(一)Logger(日志记录器):应用程序直接调用的接口,负责产生日志
1.logging.getLogger()
'''
logging.getLogger():
不传参数(或者传“”),返回root logger
传参数(例如"my_app"),返回对应的logger实例
'''
logger = logging.getLogger(__name__)
2.logger.setLevel():
'''
logger.setLevel():设置Logger最低记录级别,即只有等于或高于指定级别的日志才会被处理
级别优先级:DEBUG < INFO < WARNING < ERROR < CRITICAL
'''
# 只记录INFO及以上级别
logger.setLevel(logging.INFO)
(二)Handler(处理器)
'''
Handler:决定日志输出位置
常见类型:
StreamHandler:控制台
FileHandler:文件
RotatingFileHandler:按大小分割日志文件
TimeRotatingFileHandler:按时间分割日志文件
'''
# 创建控制台处理器
console_handler = logging.StreamHandler()
addHandler()
'''
addHandler(handler):将一个logging.Handler实例(如FileHandler,StreamHandler)添加到Logger中
Logger会将日志记录传递给所有绑定的Handler,由Handler决定如何处理
'''
logger.addHandler(console_handler)
(三)Formatter(格式化器)
'''
Formatter:定义日志的显示格式
常用格式字段:
%(asctime)s 时间
%(levelname)s 日志级别(INFO,WARNING)
%(message)s 日志内容
%(name)s Logger名称
'''
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
(四) Filter(过滤器)
'''
Filter:控制哪些日志需要记录
'''
class MyFilter(logging.Filter):
def filter(self, record):
return "secret" not in record.getMessage()
logger.addFilter(MyFilter())
二、基本配置
1.快速配置
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("app.log"),
logging.StreamHandler()
]
)
2.手动配置
import logging
LOG_DIR = r"D:\DeskTop\Projects"
os.makedirs(LOG_DIR, exist_ok=True)
log_file_path = os.path.join(LOG_DIR, "log.txt")
logger = logging.getLogger()
logger.setLevel(logging.INFO)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
file_handler = logging.FileHandler(log_file_path, encoding='utf-8')
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger.addHandler(console_handler)
logger.addHandler(file_handler)