【问题标题】:How to log source file name and line number in Python in Eclipse, PyCharm, and elsewhere? [duplicate]如何在 Eclipse、PyCharm 和其他地方的 Python 中记录源文件名和行号? [复制]
【发布时间】:2020-04-21 12:53:46
【问题描述】:

在使用 Eclipse 或 Pycharm 等 IDE 时,记录文件名和行号的最佳方式是什么?具体来说,将日志语句链接到源代码会很有用,这是 Java 的一种非常常见的设置。

【问题讨论】:

  • 请注意有一个类似的更通用的问题,它没有解决使用 PyDev 在 PyCharm 和 Eclipse 中进行日志记录的问题,特别是没有提到能够将日志输出链接到源代码。上一个确实包含此类信息的问题措辞过于具体,两年内吸引了 155 次观看,而十年内吸引了 45,000 次观看,但高流量限制了附加信息。还有一项调查(JetBrains 承认)说 PyCharm 被 35% 的 Python 开发人员使用(只有 2% 的 Eclipse pydev)jetbrains.com/research/python-developers-survey-2018
  • 但这包含 none 的上下文。您在此处的帖子没有特定于 IDE/插件的内容或问题。也许如果您从受骗者的基本格式开始问题,概述了它的特定问题(我猜是日志中的链接不可点击?),然后给出一个解释它如何工作的答案以及限制,这可能是有用的。但是一个通用的问题和一个将您发送到其他地方以获取任何有用信息的答案并没有帮助(接近meta.stackexchange.com/questions/225370/…)。
  • 正如我在这个问题中所做的那样,一个不能比开始一个句子更具体的词了,“特别是链接......”因此很难编辑为提供更多的特异性。问题标题本身还指定查询是针对编写 Python 的 Eclipse 和 Pycharm 用户。这就是上下文,在问题的描述中重复出现。对于第一条评论中链接的民意调查所引用的 65% 的 python 开发人员来说,这些信息是无用的。不过,我应该对通用答案给出一些提示。
  • 请注意,此处给出的答案是完整的、独立的、简单的、简洁的,提供了非常有用的信息,无需通过附加链接进一步深入研究此解决方案的历史。
  • 另一个更简单的选择是将其添加到具有前缀的欺骗中,例如“如果您想要指向 pydev 中源的链接/无论您可以使用什么......”

标签: python eclipse logging hyperlink pycharm


【解决方案1】:
import logging, sys, os
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format='%(message)s | \'%(name)s:%(lineno)s\'')
log = logging.getLogger(os.path.basename(__file__))


log.debug("hello logging linked to source")

另请参阅Pydev source file hyperlinks in Eclipse console 了解更多讨论和历史记录。

【讨论】:

  • 这对我不起作用。 %(name)s 是模块名,不是文件名
  • 它在 Eclipse 中适用于具有上述代码的自包含文件的简单情况。不为所有用例提供担保,但它确实回答了“如何记录源文件名......”的问题,在源代码中留下了日志语句的链接,在 IDE 控制台中输出。还有其他答案可以做到吗?在“更长的讨论和历史”下还有其他版本。为什么有人留下评论和反对票立即无法理解。这也表明缺乏个性。 Stackoverflow 说这条评论我自己留下了 20 多个字符。
  • 如果你去这里,docs.python.org/3/howto/logging.html 它给出了一个传递模块名称的例子。上面的代码通过__file__你需要澄清你在做什么,因为它不能实现上面的代码。
  • 感谢您的回复。评论后我花了一些时间让它工作,对我有用的是格式字符串Formatter('%(asctime)s %(levelname)s File "%(pathname)s", line %(lineno)s:\t%(message)s')。问题在于%(pathname)s 很长。有时有效的是Formatter('%(asctime)s %(levelname)s [%(filename)s":%(lineno)s]:\t%(message)s') - 使用这个运行文件有时会被超链接,但项目中的其他文件不是。
  • 现在我阅读了您的最后一条评论,我意识到您正在将文件名传递给记录器以代替模块名称。为什么不用%(filename)s 而不是改名呢?
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多