python - 如何使用 Python 记录当前行和堆栈信息?

标签 python logging traceback

我有如下的日志记录功能。

logging.basicConfig(
    filename = fileName,
    format = "%(levelname) -10s %(asctime)s %(message)s",
    level = logging.DEBUG
)

def printinfo(string):
    if DEBUG:
        logging.info(string)

def printerror(string):
    if DEBUG:
        logging.error(string)
    print string

我需要登录行号,堆栈信息。例如:

1: def hello():
2:    goodbye()
3:
4: def goodbye():
5:    printinfo()

---> Line 5: goodbye()/hello()

如何用 Python 做到这一点?

已解决

def printinfo(string):
    if DEBUG:
        frame = inspect.currentframe()
        stack_trace = traceback.format_stack(frame)
        logging.debug(stack_trace[:-1])
    if LOG:
        logging.info(string)

给了我这个正是我需要的信息。

DEBUG      2011-02-23 10:09:13,500 [
  '  File "/abc.py", line 553, in <module>\n    runUnitTest(COVERAGE, PROFILE)\n', 
  '  File "/abc.py", line 411, in runUnitTest\n    printinfo(string)\n']

最佳答案

当前函数名称、模块和行号,您只需更改格式字符串以包含它们即可。

logging.basicConfig(
    filename = fileName,
    format = "%(levelname) -10s %(asctime)s %(module)s:%(lineno)s %(funcName)s %(message)s",
    level = logging.DEBUG
)

大多数人在记录异常时只需要堆栈,如果您调用 logging.exception(),记录模块会自动执行此操作。如果您确实需要其他时间的堆栈信息,那么您将需要使用 traceback 模块来提取您需要的其他信息。

关于python - 如何使用 Python 记录当前行和堆栈信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093075/

相关文章:

python - Google Stackdriver 使用 Redis 队列登录 App Engine (Python)

python - python 中的正则表达式不起作用 - 在 pythex 中有效,但在 python 3.6 中无效

python - Pyinstaller 在文件提取过程中添加启动画面或视觉反馈

php - 不存在的类: Template - Upgrade to Code Igniter 3.0.0

python - 为什么我不能在 Python 中 pickle 错误的 Traceback?

python - 手动创建 Python Traceback

python - 应用 pandas group 函数保留其他列

java - 明确设置 apache HttpClient 日志级别

python - 使用 dictConfig 的 Django 日志记录找不到 "logging"模块

debugging - 这是什么? '[C]: ?'