ojs*_*ojs 11 python debugging logging
是否有一些相对简单的方法以编程方式将源代码行包含到python logger报告中.例如...
import logging
def main():
something_is_not_right = True
logging.basicConfig(level=logging.DEBUG,
format=('%(filename)s: '
'%(levelname)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(message)s')
)
if something_is_not_right == True:
logging.debug('some way to get previous line of source code here?')
Run Code Online (Sandbox Code Playgroud)
所以输出看起来像这样.
example.py: DEBUG: main(): 14: if something_is_not_right == True:
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 16
import inspect
import logging
import linecache
def main():
something_is_not_right = True
logging.basicConfig(level=logging.DEBUG,
format=('%(filename)s: '
'%(levelname)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(message)s')
)
if something_is_not_right:
logging.debug(linecache.getline(
__file__,
inspect.getlineno(inspect.currentframe())-1))
if __name__=='__main__':
main()
Run Code Online (Sandbox Code Playgroud)
产量
test.py: DEBUG: main(): 18: if something_is_not_right == True:
Run Code Online (Sandbox Code Playgroud)
只是因为我看到 unutbu 尝试了类似的东西,这是我想出的代码(否则发布太晚了):
import logging, sys
# From logging.py
def currentframe():
"""Return the frame object for the caller's stack frame."""
try:
raise Exception
except:
return sys.exc_traceback
f = open(__file__.rstrip('c'))
owncode = f.readlines()
f.close()
def main():
something_is_not_right = True
logging.basicConfig(level=logging.DEBUG,
format=('%(filename)s: '
'%(levelname)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(message)s')
)
if something_is_not_right == True:
prev = owncode[currentframe().tb_frame.f_back.f_lineno - 2]
logging.debug('previous line of source code here:\n%s' % prev)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6681 次 |
| 最近记录: |