欢迎访问宙启技术站
智能推送

Python中使用logging模块记录异常信息

发布时间:2023-12-17 08:05:52

logging模块是Python内置的标准库,用于记录程序运行时的日志信息。通过使用logging模块,我们可以更好地追踪程序的执行过程,定位问题,并进行错误分析和调试。

使用logging模块记录异常信息非常简单,只需在代码中捕获异常,并使用logging模块的相关方法输出异常信息即可。

下面是一个使用logging模块记录异常信息的例子:

import logging

def divide(x, y):
    try:
        result = x / y
        return result
    except Exception as e:
        # 使用logging模块记录异常信息
        logging.exception("An exception occurred: {}".format(e))

if __name__ == "__main__":
    # 设置logging模块配置
    logging.basicConfig(level=logging.ERROR, filename='error.log', filemode='w', format='%(asctime)s - %(levelname)s - %(message)s')
    
    # 测试异常情况
    result = divide(10, 0)

在上面的例子中,我们定义了一个divide函数,用于计算两个数的商。在函数中,我们尝试计算x除以y的结果,并返回。如果计算过程中出现异常,我们使用logging模块的exception方法记录异常信息。

if __name__ == "__main__":代码块中,我们对logging模块进行了一些配置,包括日志级别(level=logging.ERROR表示只记录错误级别及以上的日志)、日志文件名(filename='error.log'表示日志输出到error.log文件)、文件模式(filemode='w'表示每次运行程序时清空原日志文件)、日志格式(format='%(asctime)s - %(levelname)s - %(message)s'表示日志的格式为时间-日志级别-日志信息)。

最后,我们调用divide函数并传入两个参数,其中第二个参数为0,会出现除零异常。此时,程序会捕获异常,并使用logging模块记录异常信息。

当我们运行上述代码后,会在同级目录下生成一个error.log文件,并且文件中记录了异常信息,例如:

2019-11-01 14:29:06,138 - ERROR - An exception occurred: division by zero
Traceback (most recent call last):
  File "test.py", line 8, in divide
    result = x / y
ZeroDivisionError: division by zero

除了日志文件,我们还可以将日志输出到控制台,可以使用logging.StreamHandler类来设置控制台输出。

import logging

def divide(x, y):
    try:
        result = x / y
        return result
    except Exception as e:
        # 使用logging模块记录异常信息
        logging.exception("An exception occurred: {}".format(e))

if __name__ == "__main__":
    # 设置logging模块配置
    logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
    console = logging.StreamHandler()
    console.setLevel(logging.ERROR)
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)
    
    # 测试异常情况
    result = divide(10, 0)

在上面的代码中,我们首先对logging模块进行了一些配置,包括日志级别、日志格式等。然后,我们创建了一个StreamHandler对象,用于控制台输出。我们将控制台输出设置为只输出错误级别的日志。最后,我们将该控制台输出添加到root logger中。

当我们运行上述代码后,除了在error.log文件中记录异常信息外,还会在控制台中输出相同的错误信息。

通过使用logging模块记录异常信息,我们可以更好地追踪程序的执行过程,并及时发现和解决问题。同时,通过配置logging模块,我们可以灵活地控制日志的输出方式和级别。