stack_info
时间: 2023-08-08 17:14:01 浏览: 229
`stack_info` 是 Python 3.8 中 `logging` 模块中新增的一个特性,用于在日志中记录当前线程的调用栈信息。具体来说,它记录了当前线程的栈帧信息(函数名、文件名、行号等),可以帮助开发者更方便地追踪问题。
使用 `stack_info` 的方法很简单,只需要在日志记录中添加 `%(stack_info)s` 占位符即可。例如:
```python
import logging
logging.basicConfig(format='%(asctime)s %(message)s [%(stack_info)s]')
def foo():
logging.warning("This is a warning message from foo()")
def bar():
foo()
bar()
```
运行上面的代码会输出如下日志:
```
2021-07-27 16:42:59,842 This is a warning message from foo() [bar, test.py:10, <module>, test.py:14]
```
其中 `[bar, test.py:10, <module>, test.py:14]` 是调用栈信息,表示当前线程的调用栈为 `bar()` -> `foo()` -> `<module>`。
相关问题
logging stack_info
`stack_info`是Python标准库中`logging`模块中的一个参数,用于记录堆栈信息。它是一个布尔类型的参数,如果设置为True,则在日志记录中包含完整的堆栈跟踪信息。这对于调试非常有用,因为它可以帮助你在代码中定位问题。例如,如果你在代码中捕获了一个异常,并想要在日志中记录完整的堆栈跟踪信息,你可以使用如下代码:
```python
import logging
try:
# some code that might raise an exception
except Exception as e:
logging.error("An error occurred: %s", str(e), stack_info=True)
```
当异常发生时,这将记录一个错误消息以及完整的堆栈跟踪信息。注意,`stack_info`参数只有在`logging.error()`等级或更高级别的日志记录函数中才有效。
int main(void) { aciga_system_cbs_t cbs = { .ble_stack_inited = ble_stack_inited, .prov_result = prov_result, .platform_io_event = platform_io_event, }; aciga_system_init(&cbs); aciga_app_init(); const device_info_t *_pstdevice_info = aciga_device_strorage_get_device_info(); uint8_t _au8device_mac[6]; aciga_common_str_to_hex( _pstdevice_info->stdid_info.szmac, _au8device_mac, sizeof(_au8device_mac) ); aciga_common_reversal_byte((char *) _au8device_mac, sizeof(_au8device_mac) ); BT_INFO("adv pid=%d", _pstdevice_info->stpid_info.device_pid); uint32_t pid = _pstdevice_info->stpid_info.device_pid; if(pid == 0){ BT_ERR("pid error,use default pid=%d",DEFAULT_PID); pid = DEFAULT_PID; } aciga_connect_adv_config_data(_au8device_mac, pid, _pstdevice_info->stdid_info.szdid); char adv_name[31]; aciga_get_broadcast_name(&adv_name,pid); aciga_connect_adv_config_name(adv_name); aciga_connect_adv_set_lowpoer_interval(ADV_LOWPOWER_INTERVAL); aciga_connect_adv_set_enable(true); uint8_t secret[16]; aciga_common_str_to_hex(_pstdevice_info->stdid_info.szkey, secret, sizeof(secret)); aciga_system_set_conf(ACIGA_SYS_CONF_DEV_SECRET, (void *)secret); bool lowpower_support = true; aciga_system_set_conf(ACIGA_SYS_CONF_LOW_POWER_SUPPORT, (void *)&lowpower_support); pwr_mgr_init(); aciga_host_ota_init(); //test_write_default_key(); // aciga_system_run(0, NULL, NULL); return 0; }
这是一个C语言程序的主函数,程序的功能是初始化系统并启动连接广告。程序首先定义了一个aciga_system_cbs_t类型的结构体变量cbs,并给其中的三个成员变量赋值,这些成员变量分别是ble_stack_inited、prov_result和platform_io_event。然后程序调用aciga_system_init函数和aciga_app_init函数来初始化系统和应用程序。接下来程序调用aciga_device_strorage_get_device_info函数来获取设备信息,并将其存储在一个名为_pstdevice_info的指针所指向的常量中。程序接着将设备MAC地址转换成16进制表示,并将其反转。然后程序根据设备信息设置连接广告的参数,并将其启用。程序接着将设备秘钥转换成16进制表示,并将其存储在系统配置中。程序最后启动系统并返回0。
阅读全文