生成代码子模块功能说明
命令功能
支持对用户定义的.ini配置文件进行解析,生成对应的头文件和metadata文件。可在程序文件中包含头文件调用接口,记录日志信息。可在日志解析时使用metadata文件,解析日志信息。
命令格式
tracelog generator [-h | --help] [-l {0,1,2,3} | --log-level {0,1,2,3}] {-i <INI_FILE> | --input <INI_FILE>} [-o <OUTPUT_PATH> | --output <OUTPUT_PATH>]
参数说明
参数 |
参数选项 |
参数说明 |
---|---|---|
-h/--help |
- |
可选参数,获取帮助信息。 |
-l/--log-level |
0/1/2/3 |
可选参数,设置日志级别,默认为1。
|
-i/--input |
INI_FILE |
必选参数,指定输入的.ini配置文件,.ini配置文件说明可参考.ini配置文件说明。 |
-o/--output |
OUTPUT_PATH |
可选参数,指定生成头文件和metadata文件的目录,默认头文件和metadata生成在当前文件夹,生成的头文件名称与输入的.ini文件名相同。 |
.ini配置文件说明
以user.ini文件为例:
memoryKBs=5120 tracelog="/var/log/trace.log" [normal_example] name=char* id=int character=char [callstack_example] key=int callstack=3 [pmu_example] key=int enablepmu=true

在.ini配置文件里包含以下两部分内容:
- 全局配置项。
- 缓存大小配置,不配置默认为5120KB。
- 日志路径和日志文件名配置,不配置默认为“/var/log/trace.log”。
- 包含一个或多个section,每个section有以下两部分内容(最多支持16个section,每个section最多支持16个参数)。
- section名称,以“[section名称]”的形式呈现,例如:[normal_example]。
- 参数,可指定一个或多个参数。普通日志参数以“参数名=参数类型”的形式呈现,例如name=char*。其他参数请参见表2。
参数类型 |
参数说明 |
格式 |
---|---|---|
memoryKBs |
缓存大小。 |
memoryKBs=正整数,范围为80~81920,不配置默认为5120。 |
tracelog |
日志生成路径。 |
字符串,用英文双引号包裹。 |
section名称 |
事件名。 |
字符串,用“[ ]”包裹。 |
普通日志参数 |
事件中传递的参数。 |
参数名=参数类型,类型支持int、char 、char*。 |
(可选)callstack参数 |
跟踪调用栈参数。 |
callstack=正整数,数字可自主定义为1~64内的正整数,否则默认为5。 |
(可选)enablepmu参数 |
采集PMU事件参数。 |
enablepmu=true,不区分大小写,等号前后可以有空格,除此之外其他情况配置不成功。 说明:
在配置文件中配置PMU采集后,在业务中第一次调用日志接口时会进行PMU采集初始化(大概6ms~7ms),此时调用日志接口无法获取到PMU数据信息,运行时终端会打印“[WARNING] Event information cannot be obtained because PMU collection is being initialized.”,此情况下cycles数据返回默认值0。 若使用PMU采集能力,请在程序结束前调用DestroyLoggerDevice()方法,否则可能会出现程序异常等情况。 |

callstack、enablepmu参数配置规则:
- 若同一个section中callstack、enablepmu参数都未配置,仅会生成一个接口。
- 若同一个section中已配置enablepmu参数,未配置callstack参数,则会生成两个接口。一个接口会记录PMU数据,一个接口不会记录PMU数据。为了避免函数同名,业务应用若要调用会记录PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu”内容。(若该section仅配置enablepmu参数,则仍会只生成一个接口,仅采集PMU数据。)
- 若同一个section中已配置callstack参数,未配置enablepmu参数,则会生成两个接口。一个接口会记录callstack数据,一个接口不会记录callstack数据。为了避免函数同名,业务应用若要调用会记录callstack数据的接口,其对应的section名称要在原来的基础上增加“_callstack”内容。(若该section仅配置callstack参数,则仍会只生成一个接口,仅采集调用栈数据。)
- 若同一个section中同时配置callstack、enablepmu参数,则会生成四个接口。
一个接口会同时记录callstack数据和PMU数据,一个接口记录callstack数据不记录PMU数据,一个接口记录PMU数据不记录callstack数据,最后一个接口callstack和PMU数据均不记录。
为了避免函数同名:
- 业务应用若要调用会记录callstack数据和PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu_callstack”内容。
- 业务应用若要调用仅记录callstack数据的接口,其对应的section名称要在原来的基础上增加“_callstack”内容。
- 业务应用若要调用仅记录PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu”内容。
基于x86服务器提供的高性能程序追踪库工具,以上配置规则不生效。
不同日志量下缓存大小的最佳配置
在CPU核数128核、总内存250G,静止时CPU空载率为99%以上的服务器不同场景下,测得的最佳配置如下:
- 业务应用启动10线程,每条线程10000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。
- 业务应用启动10线程,每条线程100000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。
- 业务应用启动10线程,每条线程1000000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。
使用示例
执行以下命令,查看生成代码子模块支持的功能信息:
tracelog generator -h
返回信息如下:
NAME tracelog generator - Run the command to parse the .ini configuration file and generate the needed header file and metadata file. USAGE tracelog generator [-h | --help] [-l {0,1,2,3} | --log-level {0,1,2,3}] {-i <INI_FILE> | --input <INI_FILE>} [-o <OUTPUT_PATH> | --output <OUTPUT_PATH>] DESCRIPTION The generated header file contains the corresponding API. You can use this header file for log development and the metadata file for log parsing. OPTIONS -h, --help Get help information and exit. -l {0,1,2,3}, --log-level {0,1,2,3} Specify the print log level, 0(debug) | 1(info) | 2(warning) | 3(error).Default is 1(info). -o, --output Generated file directory, which defaults to the current directory. The name of the generated header file is the same as the name of the inputted .ini file. -i, --input Input .ini file. For details about how to write the .ini file, see the example.ini file in the current directory.