在编程中,日志记录(logging)是一种非常重要的工具,它可以帮助我们跟踪程序的运行状态、调试错误以及记录重要信息。
Python 提供了一个内置的 logging 模块,专门用于处理日志记录任务。与简单的 print 语句相比,logging 模块更加灵活和强大,能够满足不同场景下的日志需求。
logging
print
为什么使用 logging 模块?
logging 模块的基本用法
1. 导入 logging 模块
首先,我们需要导入 logging 模块:
2. 配置日志级别
日志级别用于控制日志的详细程度。logging 模块提供了以下几种日志级别:
你可以通过以下代码设置日志级别:
3. 记录日志
设置好日志级别后,你可以使用以下方法记录日志:
4. 日志输出格式
你可以通过 basicConfig 方法自定义日志的输出格式。例如:
basicConfig
5. 将日志输出到文件
默认情况下,日志会输出到控制台。如果你希望将日志保存到文件中,可以这样配置:
logging 模块的高级用法
1. 使用多个日志记录器
在大型项目中,你可能需要为不同的模块或组件创建独立的日志记录器。可以通过以下方式实现:
2. 日志过滤器
你可以通过过滤器来控制哪些日志需要被记录。例如:
3. 日志轮转
当日志文件过大时,可以使用 RotatingFileHandler 或 TimedRotatingFileHandler 实现日志轮转:
RotatingFileHandler
TimedRotatingFileHandler
logging 模块常用的属性和方法
1. 核心类
logging.Logger
logging.getLogger(name)
logger = logging.getLogger("my_logger")
logging.Handler
handler = logging.FileHandler("app.log")
logging.Formatter
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
logging.Filter
filter = logging.Filter("module.name")
2. Logger 对象常用方法
logger.setLevel(level)
logging.DEBUG
logging.INFO
logger.setLevel(logging.DEBUG)
logger.debug(msg)
logger.debug("调试信息")
logger.info(msg)
logger.info("程序启动")
logger.warning(msg)
logger.warning("磁盘空间不足")
logger.error(msg)
logger.error("操作失败")
logger.critical(msg)
logger.critical("系统崩溃")
logger.addHandler(handler)
logger.addFilter(filter)
3. Handler 常用类型
StreamHandler
handler = logging.StreamHandler()
FileHandler
handler = logging.RotatingFileHandler("app.log", maxBytes=1e6, backupCount=3)
handler = logging.TimedRotatingFileHandler("app.log", when="midnight")
SMTPHandler
handler = logging.SMTPHandler("mail.example.com", "from@example.com", "to@example.com", "Error Log")
4. 日志级别(常量)
CRITICAL
ERROR
WARNING
INFO
DEBUG
NOTSET
5. Formatter 常用格式字段
%(asctime)s
2023-01-01 12:00:00,123
%(levelname)s
%(message)s
程序启动成功
%(name)s
my_logger
%(filename)s
app.py
%(lineno)d
42
%(funcName)s
main
6. 快速配置方法
logging.basicConfig()
logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s')
常用参数:
level:设置根记录器级别
level
filename:输出到文件
filename
filemode:文件模式(如 'w' 覆盖)
filemode
'w'
format:格式字符串
format
datefmt:日期格式(如 "%Y-%m-%d %H:%M:%S")
datefmt
"%Y-%m-%d %H:%M:%S"
实例
1. 基础配置
2. 多处理器复杂配置
3. 日志分割