怎么让logging显示报错的时候的行号而不是显示引用的函数的行号
时间: 2023-11-22 20:52:55 浏览: 88
在 Python 中,可以使用 `logging` 模块的 `Logger` 对象的 `exception` 方法输出异常信息,并自动添加异常发生的文件名和行号信息。示例如下:
```python
import logging
try:
# some code that may raise an exception
raise ValueError("something went wrong")
except Exception as e:
logging.getLogger().exception(e)
```
当程序执行到 `logging.getLogger().exception(e)` 时,如果发生了异常,`exception` 方法会自动输出异常信息和发生异常的文件名和行号信息,例如:
```
ERROR:root:something went wrong
Traceback (most recent call last):
File "example.py", line 5, in <module>
raise ValueError("something went wrong")
ValueError: something went wrong
```
注意,使用 `exception` 方法需要将日志级别设置为 `ERROR` 或更高级别,否则不会输出异常信息。
相关问题
logger 怎么追踪报错行号的
在 Python 中,可以使用 `logging` 模块来记录日志信息,包括错误信息。通过设置日志记录的级别,可以记录不同级别的错误信息。如果想要追踪报错的行号,可以在日志中记录堆栈信息。可以在配置 logger 时,设置 `format` 参数为包含 `%s` 的字符串,例如:
```python
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s - %(lineno)d')
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
def foo():
try:
1 / 0
except Exception as e:
logger.error(str(e), exc_info=True)
foo()
```
在这个例子中,我们定义了一个 logger 并设置日志级别为 DEBUG,同时设置了一个控制台输出的 handler。在 `formatter` 中,我们设置了包含 `%s`、`%(pathname)s` 和 `%(lineno)d` 的格式字符串。在 `foo` 函数中,我们故意引发了一个除以零的异常,并在 `except` 块中调用 `logger.error` 方法记录错误信息,通过 `exc_info=True` 参数记录完整的堆栈信息。
当程序运行时,控制台输出的日志信息将包含错误的文件名和行号。例如:
```
2021-10-16 11:32:26,210 - __main__ - ERROR - division by zero - example.py - 14
```
怎么让 logging 模块 显示 调用的文件名字和行号
可以通过在 logging.basicConfig() 函数中设置参数来指定输出格式。下面的代码演示了如何在输出信息中包含文件名和行号:
```python
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(filename)s - %(lineno)d',
level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("This is an info message")
```
其中,format 参数指定了输出格式。`%(filename)s` 和 `%(lineno)d` 分别表示文件名和行号。通过这种方式,当调用 logger 对象的 info() 方法时,输出信息中将包含文件名和行号。
阅读全文