更新时间:2026-07-13 GMT+08:00
分享

日志分析(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
表1 参数说明

配置项

说明

示例值

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 参数需传入宽字符编码路径

相关文档