python 代码中加入日志系统

本文介绍了一种在Python项目中配置日志模块的方法,通过使用RotatingFileHandler实现日志文件的滚动保存,并设置了日志级别及输出格式,便于开发者在修改源代码时进行调试。

在修改一些系统的python源代码时,经常查看自己的修改是否有效,或者查看系统中的一些参数是什么样子的,此时可以加入一个与系统无管的日志模块,对原系统不造成影响,又能查看参数:

记录如下:

#####log config

import logging as qwm_log
import logging.handlers
log_file='C:\\Users\\founder\\Desktop\\log.txt'
#log_file='/var/log/qwm_ironic_log'
handler = logging.handlers.RotatingFileHandler(log_file, maxBytes = 20*1024*1024, backupCount = 10);
qwm_log.basicConfig(level=qwm_log.NOTSET,
                   format='%(asctime)s %(name)-s %(levelname)-5s %(message)s',
                   datefmt='%m-%d %H:%M')
logger = qwm_log.getLogger('qwm');
logger.setLevel(qwm_log.DEBUG)

#####end log config

logger.info("test")


### Python中使用logging模块的最佳实践 在Python开发中,`logging`模块是记录日志的核心工具,它提供了灵活的配置和丰富的功能来满足不同场景的需求。以下是实现日志打印功能的最佳实践。 #### 1. 配置日志的基本方法 通过`logging.basicConfig()`函数可以快速配置日志的基本设置,包括日志级别、输出格式和目标文件等[^2]。以下是一个简单的示例: ```python import logging logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log', filemode='a' ) logging.debug("This is a debug message") ``` #### 2. 使用Logger对象进行更细粒度的控制 为了支持多模块的日志共享和独立配置,建议为每个模块创建独立的Logger实例[^2]。例如: ```python # mymodule.py import logging logger = logging.getLogger(__name__) # 获取当前模块的Logger def run(): logger.debug("This message is from mymodule") ``` 在主程序中配置Logger: ```python # main.py import logging import mymodule def main(): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(name)s - %(message)s') mymodule.run() if __name__ == "__main__": main() ``` #### 3. 将日志写入文件 如果需要将日志保存到文件中,可以通过`filename`参数指定日志文件路径[^3]。此外,还可以结合`RotatingFileHandler`实现日志文件的轮转,避免日志文件过大影响性能[^4]。例如: ```python import logging from logging.handlers import RotatingFileHandler # 创建Logger logger = logging.getLogger("example_logger") logger.setLevel(logging.INFO) # 创建RotatingFileHandler handler = RotatingFileHandler("example.log", mode="a", maxBytes=5*1024*1024, backupCount=3, encoding="utf-8") handler.setLevel(logging.INFO) # 设置日志格式 formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) # 添加处理器到Logger logger.addHandler(handler) # 记录日志 logger.info("This is an informational message") ``` #### 4. 处理异常并记录堆栈信息 当捕获到异常时,可以使用`logger.exception()`方法记录详细的错误信息和堆栈跟踪。例如: ```python try: x = 1 / 0 except Exception as e: logger.exception("An error occurred: %s", str(e)) ``` #### 5. 日志级别的选择 根据实际需求选择合适的日志级别,常见的日志级别从低到高依次为:DEBUG、INFO、WARNING、ERROR、CRITICAL。例如: ```python logger.debug("Debugging information") # 调试信息 logger.info("Informational message") # 普通信息 logger.warning("Warning message") # 警告信息 logger.error("Error message") # 错误信息 logger.critical("Critical message") # 严重错误信息 ``` #### 6. 避免日志重复打印的问题 在某些情况下,可能会出现日志重复打印的现象,通常是由于Logger对象添加了多个Handler导致[^4]。解决方法是在添加Handler之前调用`logger.propagate = False`或检查是否已存在Handler。例如: ```python logger = logging.getLogger("example_logger") logger.propagate = False # 禁止日志向上级传播 ``` ### 示例完整代码 以下是一个完整的日志配置示例,包含文件输出、日志轮转和异常处理: ```python import logging from logging.handlers import RotatingFileHandler # 配置Logger logger = logging.getLogger("example_logger") logger.setLevel(logging.DEBUG) # 创建RotatingFileHandler handler = RotatingFileHandler("example.log", mode="a", maxBytes=5*1024*1024, backupCount=3, encoding="utf-8") handler.setLevel(logging.DEBUG) # 设置日志格式 formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) # 添加处理器到Logger logger.addHandler(handler) # 记录日志 logger.debug("Debug message") logger.info("Info message") try: x = 1 / 0 except Exception as e: logger.exception("An error occurred: %s", str(e)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值