Print call frame

Create a file in python lib directory and add following code:
for example: /usr/local/lib/python2.7/dist-packages/print_call_frame.py

 

{ dataSrc: "unbound", render: "code", id: "ii0", dataSrcObj: { noAutoLoad: true }, renderObj: { style: "border: 1px solid #88c; border-radius: 6px; width: 80%; background-color: #ddf; white-space: pre; font-family: courier;" }, obj: { body: "<div><span><span>import inspect</span></span><br></div><div><br></div><div><span><span>def print_frame():</span></span></div><div><span><span>   stack = inspect.stack()<br>    for s in reversed(stack[1:-2]):<br>        print \"%s()\\t\\t%s #%s -> \" % (s[3], s[1], s[2])</span></span><br><br></div><div><span><span>    print \"%s()\\t\\t%s #%s\" % (s[3], s[1], s[2])</span></span>   <br></div>" }}
import inspect

def print_frame():
  stack = inspect.stack()
    for s in reversed(stack[1:-2]):
        print "%s()\t\t%s #%s -> " % (s[3], s[1], s[2])

    print "%s()\t\t%s #%s" % (s[3], s[1], s[2])  
 

 

Then you can add following line in the function that want to print the call frame

 

{ dataSrc: "unbound", dataSrcObj: { noAutoLoad: true }, render: "code", renderObj: { style: "border: 1px solid #88c; border-radius: 6px; width: 80%; background-color: #ddf; white-space: pre; font-family: courier;" }, obj: { body: "<div><span><span>from print_call_frame import print_frame</span></span><br></div><div><span><span>print_frame()</span></span> <br></div>" }, id: "ii1"}
from print_call_frame import print_frame
print_frame()
 

 

If you are using devstack, the logs will be printed in the stack screen.

A sample output should be like this:

{ dataSrc: "unbound", dataSrcObj: { noAutoLoad: true }, render: "code", renderObj: { style: "border: 1px solid #88c; border-radius: 6px; width: 80%; background-color: #ddf; white-space: pre; font-family: courier;" }, obj: { body: "spawn_n_impl()       /usr/local/lib/python2.7/dist-packages/eventlet/greenpool.py #82 -><br><div><span style=\"font-family:courier new,courier,monospace;\">__call__()          /usr/local/lib/python2.7/dist-packages/futurist/_green.py #70 -><br>run()          /usr/local/lib/python2.7/dist-packages/futurist/_utils.py #43 -><br>run()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/_utils.py #81 -><br>_dispatch_and_reply()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #142 -><br>_dispatch()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #186 -><br>_do_dispatch()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #129 -><br>update_vip()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/agent/agent_manager.py #233 -><br>update_vip()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #357 -><br>_refresh_device()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #348 -><br>inner()          /usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py #271 -><br>deploy_instance()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #340 -><br>create()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #93 -><br>_plug()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #249 -><br></span></div><div><span style=\"font-family:courier new,courier,monospace;\">plug_vip_port()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/agent/agent_api.py #68</span>    <br></div>" }, id: "ii5"}
spawn_n_impl()       /usr/local/lib/python2.7/dist-packages/eventlet/greenpool.py #82 ->
__call__()          /usr/local/lib/python2.7/dist-packages/futurist/_green.py #70 ->
run()          /usr/local/lib/python2.7/dist-packages/futurist/_utils.py #43 ->
run()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/_utils.py #81 ->
_dispatch_and_reply()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #142 ->
_dispatch()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #186 ->
_do_dispatch()          /usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py #129 ->
update_vip()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/agent/agent_manager.py #233 ->
update_vip()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #357 ->
_refresh_device()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #348 ->
inner()          /usr/local/lib/python2.7/dist-packages/oslo_concurrency/lockutils.py #271 ->
deploy_instance()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #340 ->
create()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #93 ->
_plug()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/drivers/haproxy/namespace_driver.py #249 ->
plug_vip_port()          /opt/stack/neutron-lbaas/neutron_lbaas/services/loadbalancer/agent/agent_api.py #68    
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值