日志分析(C SDK)
日志路径
OBS C SDK的日志路径是通过OBS.ini中LogPath字段指定的,默认存放于C SDK动态库所在目录的同级logs目录中。定位问题请查看logs目录下的运行日志:Linux环境为 eSDK-OBS-API-*-C.run.log,Windows环境为 obs-sdk-c.run.log。
OBS.ini文件应与动态库同一目录(Linux为 libeSDKLogAPI.so,Windows为 eSDKLogAPI.dll)。
也可通过 set_obs_log_path 函数在代码中指定日志路径,详见配置SDK日志(C SDK)。
日志内容格式
SDK日志格式为:日志时间|日志级别|线程号|日志内容。示例如下:
2018-05-15 22:22:54 803| INFO|[140677572568864]|request_perform start
日志级别
当系统出现问题需要定位且当前的日志无法满足要求时,可以通过修改日志的级别来获取更多的信息。日志级别从低到高为DEBUG(0) > INFO(1) > WARN(2) > ERROR(3),低级别包含高级别的所有日志信息。其中DEBUG(0)日志信息最丰富,ERROR(3)日志信息最少。
具体说明如下:
- DEBUG(0):调试级别,包含所有日志信息,额外打印调试信息。
- INFO(1):信息级别,包含WARN和ERROR的日志,额外打印OBS接口调用过程和关键信息。
- WARN(2):告警级别,包含ERROR的日志,额外打印关键事件信息(如curl_global_init初始化失败等)。
- ERROR(3):错误级别,仅打印异常错误信息。
设置方式一:通过OBS.ini配置文件设置
修改与动态库同一目录下的OBS.ini文件,配置日志的大小、个数以及级别(其中*_Run参数的配置为最常用的配置项):
;Every line must be less than 1024 [LogConfig] ;Log Size: unit=KB, 10MB = 10KB * 1024 = 10240KB LogSize_Interface=10240 LogSize_Operation=10240 LogSize_Run=10240 ;Log Num LogNum_Interface=10 LogNum_Operation=10 LogNum_Run=10 ;Log level: debug = 0,info = 1,warn = 2,error = 3 LogLevel_Interface=0 LogLevel_Operation=0 LogLevel_Run=0 ;LogFilePermission LogFilePermission=0600 [ProductConfig] ;Product Name sdkname=eSDK-OBS-API-Linux-C [LogPath] ;Log Path is relative to the path of configuration file LogPath=../logs
| 配置项 | 说明 | 示例值 |
|---|---|---|
| LogSize_* | 单个日志文件大小,单位KB | 10240(即10MB) |
| LogNum_* | 日志文件保留个数 | 10 |
| LogLevel_* | 日志级别:0=DEBUG, 1=INFO, 2=WARN, 3=ERROR | 0 |
| LogFilePermission | 日志文件权限(仅Linux) | 0600 |
| sdkname | 产品名称,Linux为eSDK-OBS-API-Linux-C,Windows为eSDK-OBS-API-Win-C | eSDK-OBS-API-Linux-C |
| LogPath | 日志存放路径,相对于OBS.ini文件的相对路径 | ../logs |
设置方式二:通过代码设置日志路径
通过 set_obs_log_path 函数在代码中指定日志路径,详见配置SDK日志(C SDK)。示例:
// 在obs_initialize之前调用
obs_status ret_status = obs_initialize(OBS_INIT_ALL);
if (OBS_STATUS_OK != ret_status)
{
printf("obs_initialize failed(%s).\n", obs_get_status_name(ret_status));
return -1;
}
// 指定日志路径,SDK将在该路径下创建OBS.ini和日志文件
ret_status = set_obs_log_path("/var/log/obs_sdk", false);
if (OBS_STATUS_OK != ret_status)
{
printf("set_obs_log_path failed(%s).\n", obs_get_status_name(ret_status));
} Windows下Unicode路径配置
Windows下,如果日志路径或文件路径包含中文字符,可通过 函数将文件路径编码设置为Unicode模式(默认为ANSI_CODE)。设置后,以下函数的文件路径参数需传入宽字符(UTF-16)编码的字节序列,参数类型仍为 ,但实际内容为 的字节表示。
// 在obs_initialize之前调用(仅Windows可用) set_file_path_code(UNICODE_CODE); // 默认为ANSI_CODE // 设置后,set_obs_log_path的log_path参数需传入宽字符编码路径 // 例如:将wchar_t路径转换为char*传入 set_obs_log_path((const char *)L"D:\\日志目录", false);
设置后,以下函数的本地文件路径参数也受影响:
| 影响函数 | 说明 |
|---|---|
| download_file | download_file_config 的 downLoad_file、check_point_file 成员需传入宽字符编码路径 |
| upload_file | upload_file_config 的 upload_file、check_point_file 成员需传入宽字符编码路径 |
| set_obs_log_path | log_path 参数需传入宽字符编码路径 |