当我们的 Python 代码出现了错误或异常时,通常会使用 Python 自带的 print
函数将错误信息输出到控制台。但在实际的项目开发中,控制台信息往往是不够直观和清晰的。这时候,我们就需要 Python 的 logging 类库来协助我们进行日志打印管理。
1. Logging 类库简介
Python 自带了 logging 库可以方便地进行日志打印管理,可以将日志输出到控制台、文件和远程服务器等多种方式。
2. Python logging 类库使用流程
2.1 导入 logging 包
我们需要先导入 Python 的 logging 包,并进行一些指定。
import logging
logging.basicConfig(filename="example.log", level=logging.DEBUG)
在创建了一个日志记录器后,需要设置日志的基本属性,比如日志文件、日志级别等。这里我们将日志输出到 example.log
文件,并将日志的级别设置为 DEBUG
。
2.2 使用 logging 输出日志
在我们需要输出日志信息的时候,使用 logging 就得心应手了。
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")
这里我模拟了5种情况,分别为 DEBUG、INFO、WARNING、ERROR、CRITICAL,表示日志的不同级别。
这些级别按照从低到高的顺序排列:DEBUG、INFO、WARNING、ERROR、CRITICAL,当日志记录器的级别设置为某个级别时,比该级别低的消息将被忽略。
2.3 其他高级用法
在实际项目中,使用 logging 的机会更多是写到文件里面去,比如下面这种写法:
import logging
# 创建并配置 logger
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)
# 创建文件目录
fh = logging.FileHandler(filename="example.log", mode="w", encoding="utf-8")
fh.setLevel(logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s")
fh.setFormatter(formatter)
# 将文件 handler 添加进 logger 中
logger.addHandler(fh)
# 记录日志
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
3. 使用例子说明
为了更好地理解它在 Python 代码中的实际应用,下面我们给出两个 Python logging 类库使用的示例:
3.1 示例一:获取 IP 地址
import requests
import logging
logging.basicConfig(filename="example.log", filemode="w", level=logging.INFO)
try:
url = "https://api.ipify.org?format=json"
resp = requests.get(url, timeout=5)
resp.raise_for_status()
logging.info(f"Get IP: {resp.json()['ip']}")
except Exception as e:
logging.error(f"Failed to get IP address: {e}")
这个示例代码使用 logging 包来输出请求 IP 地址的过程中可能出现的错误。比如请求超时异常需要记录错误日志,返回 IP 地址需要记录信息日志。当然为了更好地体验 logging 包的效果,我们将日志信息输出到文件 example.log
中。
3.2 示例二:模拟一些实际的场景
import logging
import time
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
def process():
logger.debug("Start processing")
for i in range(3):
logger.info(f"Processing task {i}")
time.sleep(0.5) # 模拟任务执行时间
logger.warning("Processing completed")
if __name__ == "__main__":
process()
这个示例代码模拟了一个任务流程,我们在执行任务的时候无须使用 print 来输出当前的任务步骤。在任务执行过程中输出相应的日志级别,到最后再输出任务结束即可。
4. Logging 类库结论
日志管理是应用系统开发中一个重要组份,可以做到应用系统重大事件的记录和后期分析。Python 语音中的 logging 包提供了便捷的日志分级,日志输出等处理功能。日志的处理过程中包含 handler 表示处理器,格式化等重要概念。有必要我们学会日志级别的分配和管理,使我们开发的应用系统具有良好的可维护性和可扩展性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python logging类库使用例子 - Python技术站