当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中记录源文件名和行号

如何解决《如何在Python中记录源文件名和行号》经验,为你挑选了2个好方法。

是否可以装饰/扩展python标准日志记录系统,以便在调用日志记录方法时,它还会记录文件和调用它的行号,或者调用它的方法?



1> Seb..:

当然,检查记录文档中的格式化程序.特别是lineno和pathname变量.

%(pathname)s 发出日志记录调用的源文件完整路径名(如果可用).

%(filename)s 路径名文件名部分.

%(模块)s 模块(文件名的名称部分).

%(funcName)s 包含日志记录调用的函数名称.

%(lineno)d 发出日志记录调用的源行号(如果可用).

看起来像这样:

formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')



2> codeforester..:

除了Seb非常有用的答案之外,这里还有一个方便的代码片段,它以合理的格式演示了记录器的使用情况:

#!/usr/bin/env python
import logging

logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
    datefmt='%Y-%m-%d:%H:%M:%S',
    level=logging.DEBUG)

logger = logging.getLogger(__name__)
logger.debug("This is a debug log")
logger.info("This is an info log")
logger.critical("This is critical")
logger.error("An error occurred")

生成此输出:

2017-06-06:17:07:02,158 DEBUG    [log.py:11] This is a debug log
2017-06-06:17:07:02,158 INFO     [log.py:12] This is an info log
2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical
2017-06-06:17:07:02,158 ERROR    [log.py:14] An error occurred


使用它来获取更多细节:formatter = logging.Formatter('%(asctime)s,%(levelname)-8s [%(filename)s:%(module)s:%(funcName)s:%(lineno)d] %(消息)S')
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有