Eclipse 控制台中的 Pydev 源文件超链接
Pydev source file hyperlinks in Eclipse console
当 python 应用程序崩溃时,控制台会向发生异常的源代码显示 hyperlinks。您只需单击 link,您的源文件就会在 Eclipse 编辑器中打开。
我有自己的异常处理程序,当我的应用程序崩溃时,我想将 links 放入控制台中的源文件。
我已经查找过几次这方面的信息,但不知道如何去做,也不知道是否可行。
似乎可以在 java 中通过以“:”形式写入控制台来完成 - 侦听器将其拾取并将其转换为可点击的 link。这在 Python.
中不起作用
有什么想法吗?
如果您想在 PyDev 中放置可点击的链接,您必须按照 Python 中介绍的相同方式进行操作。
即:从https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java可以看出它匹配的模式是:
.*(File) \\"([^\\"]*)\\", line (\d*).
(注意 \
是 java 上的字符串中的转义)。
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")
以上就是您所需要的,下面是更广泛的讨论,包括使用配置文件进行格式化和 getLogger 的包装器。
2017 年 11 月 19 日添加了两个额外的正则表达式,因此日志配置中的日志格式化程序只需要包含 '%(filename)s:%(lineno)s'
以创建更简洁的 link。
示例:
[formatter_customFormatter]
format=%(asctime)s | %(name)s | %(levelname)s | %(message)s '%(filename)s:%(lineno)s'
然而,当从子目录调用导入的代码时,这会失败,因为文件名不包含任何路径信息。使用 %(filepath)s
可行,但代价是打印附加到日志输出的整个绝对路径,与前面的文件正则表达式遇到的问题相同。但是 %(name)s
通常几乎完全符合您的要求,parent_dir.filename,因为通常的做法是将 __name__
传递给 getLogger 调用。怎么办?
logging.getLogger(__name__.replace(".","/") + ".py")
您还可以使用与
中相同的代码围绕 getLogger 编写一个包装器
def getLogger(name):
return logging.getLogger(name.replace(".","/") + ".py")
然后你调用Logger就正常了
logger = myLogger.getLogger(__name__).
需要注意的是 __name__ 是“__main__”,其中 main 是 运行,因此您需要区别对待才能从文件中获取 link。一种简单的方法是将 my_filename_with_main 而不是 __name__ 传递给 getLogger。
或者可能对所有内容使用不同的包装器,如
def getLogger(name):
from os import path
name = path.basename(name)
return logging.getLogger(name)
然后您对 Logger 的调用将是
logger = myLogger.getLogger(__file__).
然后在案例文件 运行 中没有特殊处理为 '__main__'
这是一个格式示例,名称是传递给 getLogger 的任何内容:
format=%(asctime)s | %(levelname)s | %(name)-20s | %(funcName)-10s | %(message)-35s | '%(name)s:%(lineno)s'
Fabio 于 17 年 3 月提供的 link 非常有帮助,我将在这里重复,https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java 第 102 - 104 行可以找到正则表达式。
注意:PyCharm 只喜欢单引号版本(如上所示),Eclipse 不是那么特别,也可以。
当 python 应用程序崩溃时,控制台会向发生异常的源代码显示 hyperlinks。您只需单击 link,您的源文件就会在 Eclipse 编辑器中打开。
我有自己的异常处理程序,当我的应用程序崩溃时,我想将 links 放入控制台中的源文件。
我已经查找过几次这方面的信息,但不知道如何去做,也不知道是否可行。
似乎可以在 java 中通过以“:”形式写入控制台来完成 - 侦听器将其拾取并将其转换为可点击的 link。这在 Python.
中不起作用有什么想法吗?
如果您想在 PyDev 中放置可点击的链接,您必须按照 Python 中介绍的相同方式进行操作。
即:从https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java可以看出它匹配的模式是:
.*(File) \\"([^\\"]*)\\", line (\d*).
(注意 \
是 java 上的字符串中的转义)。
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")
以上就是您所需要的,下面是更广泛的讨论,包括使用配置文件进行格式化和 getLogger 的包装器。
2017 年 11 月 19 日添加了两个额外的正则表达式,因此日志配置中的日志格式化程序只需要包含 '%(filename)s:%(lineno)s'
以创建更简洁的 link。
示例:
[formatter_customFormatter]
format=%(asctime)s | %(name)s | %(levelname)s | %(message)s '%(filename)s:%(lineno)s'
然而,当从子目录调用导入的代码时,这会失败,因为文件名不包含任何路径信息。使用 %(filepath)s
可行,但代价是打印附加到日志输出的整个绝对路径,与前面的文件正则表达式遇到的问题相同。但是 %(name)s
通常几乎完全符合您的要求,parent_dir.filename,因为通常的做法是将 __name__
传递给 getLogger 调用。怎么办?
logging.getLogger(__name__.replace(".","/") + ".py")
您还可以使用与
中相同的代码围绕 getLogger 编写一个包装器def getLogger(name):
return logging.getLogger(name.replace(".","/") + ".py")
然后你调用Logger就正常了
logger = myLogger.getLogger(__name__).
需要注意的是 __name__ 是“__main__”,其中 main 是 运行,因此您需要区别对待才能从文件中获取 link。一种简单的方法是将 my_filename_with_main 而不是 __name__ 传递给 getLogger。
或者可能对所有内容使用不同的包装器,如
def getLogger(name):
from os import path
name = path.basename(name)
return logging.getLogger(name)
然后您对 Logger 的调用将是
logger = myLogger.getLogger(__file__).
然后在案例文件 运行 中没有特殊处理为 '__main__'
这是一个格式示例,名称是传递给 getLogger 的任何内容:
format=%(asctime)s | %(levelname)s | %(name)-20s | %(funcName)-10s | %(message)-35s | '%(name)s:%(lineno)s'
Fabio 于 17 年 3 月提供的 link 非常有帮助,我将在这里重复,https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java 第 102 - 104 行可以找到正则表达式。
注意:PyCharm 只喜欢单引号版本(如上所示),Eclipse 不是那么特别,也可以。