日志配置需设置级别、格式和输出目标,推荐使用字典配置管理。1. 设置日志级别为DEBUG或INFO以控制输出;2. 自定义格式包含时间、级别、模块名等;3. 输出到文件和控制台;4. 创建独立logger实例避免全局调用;5. 使用dictConfig集中管理复杂配置,防止重复handler和错误传播。

Python 日志记录器(logging)的配置是项目开发中非常关键的一环,它帮助开发者追踪程序运行状态、排查错误和监控系统行为。合理的配置能让日志输出清晰、结构化,并便于后期分析。
基本的日志级别设置
Python 的 logging 模块提供了五个标准日志级别,按严重性递增:
- DEBUG:详细信息,通常只在调试时使用
- INFO:确认程序按预期运行
- WARNING:表示某些意外发生,但程序仍在工作
- ERROR:由于问题导致部分功能失败
- CRITICAL:严重错误,可能导致程序无法继续运行
默认的日志级别是 WARNING,低于该级别的日志不会被记录。可以通过以下方式设置:
import logginglogging.basicConfig(level=logging.INFO) logging.info("这是一条 info 级别的日志")
配置输出格式和目标
你可以自定义日志的输出格式,包括时间、日志级别、模块名、消息内容等。同时可以指定输出到控制台或文件。
立即学习“Python免费学习笔记(深入)”;
import logginglogging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler("app.log"), logging.StreamHandler() # 输出到控制台 ] )
上面的配置会将日志同时写入 app.log 文件并打印到终端。format 中常用字段:
此版本和闪睿企业网站管理系统 2009 SP1 Build 090828 得区别是:这个可以在本地计算机一键安装所有所需组件,并安装完成后自动打开闪睿网站前台。我们的口号:简单,不思考!这个版本要的就是简单!不再需要安装IIS,配置IIS,繁琐的各种设置,下载等,就下载一个包,运行一个程序,一步到位!2.0版本更新日志:1.自主研发迷你web服务器,全自动配置参数。简单无极限!2.迷你服务器和迷你
- %(asctime)s:可读的时间戳
- %(name)s:记录器名称
- %(levelname)s:日志级别名称
- %(message)s:日志内容
- %(funcName)s:函数名
- %(lineno)d:行号
使用 logger 实例管理不同模块
建议不要直接使用 logging.debug() 等全局方法,而是创建独立的 logger 实例,便于模块化管理。
logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG)防止重复添加 handler
if not logger.handlers: handler = logging.StreamHandler() formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler)
logger.info("来自 %s 模块的信息", name)
通过字典配置实现灵活管理
对于复杂项目,推荐使用字典方式集中配置日志,提升可维护性。
import logging.configLOGGING_CONFIG = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'detailed': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' } }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'INFO', 'formatter': 'simple', 'stream': 'ext://sys.stdout' }, 'file': { 'class': 'logging.FileHandler', 'level': 'DEBUG', 'formatter': 'detailed', 'filename': 'debug.log', 'mode': 'a' } }, 'loggers': { 'myapp': { 'level': 'DEBUG', 'handlers': ['console', 'file'], 'propagate': False } }, 'root': { 'level': 'WARNING', 'handlers': ['file'] } }
logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger('myapp') logger.debug("这是从 myapp 记录器输出的调试信息")
基本上就这些。合理配置 logging 能极大提升程序可观测性,关键是根据实际需求选择合适的级别、格式和输出方式。不复杂但容易忽略细节,比如避免重复 handler 或正确设置 propagate。










