跟踪框架
SmartEDB 跟踪框架允许应用程序将跟踪和调试信息输出到日志文件。
有关概述,请参阅页面跟踪框架。
请注意,xSQL 也可以配置为输出跟踪信息。有关详细信息,请参阅 xSQL 跟踪框架页面。
如何使用
所有 C/C++ 应用程序都应链接到 mcotrace
库。
在执行任何数据库操作之前,C/C++ 应用程序可以调用 mco_trace_init_simple_handler()
函数来启用带有简单单线程处理程序的跟踪功能。例如:
...
rc = mco_db_connect( db_name, &db );
if ( MCO_S_OK == rc )
{
char * trace_file = "Trace_Output.dbg";
...
mco_trace_init_simple_handler( trace_file, MCO_TRACE_LEAVE_OPENED,
"At %t in module %m, thread %i caused error %e from line %l of file %f");
...
}
或者,也可以提供一个用户自定义的跟踪处理程序,该处理程序会在每次由跟踪数据库操作触发的消息时被调用。然后通过调用 mco_trace_set_handler()
API 来注册用户自定义的处理程序。
请注意,此调用会取代任何现有的跟踪处理程序。
int my_trace_handler( mco_severity severity, mco_trace_module module,
const char *file, int line, const char *fmt, ...)
{
// 跟踪处理程序实现
return MCO_S_OK;
}
...
rc = mco_db_connect( db_name, &db );
if ( MCO_S_OK == rc )
{
...
mco_trace_set_handler(my_trace_handler);
...
}
然后调用 mco_trace_set_modules_mask()
函数来设置需要跟踪输出的 SmartEDB 模块,并调用 mco_trace_set_level()
函数来确定跟踪消息的详细程度。
例如:
...
rc = mco_db_connect( db_name, &db );
if ( MCO_S_OK == rc )
{
...
mco_trace_set_modules_mask(1<<MCO_TRACE_TMGR | 1<<MCO_TRACE_TL);
mco_severity mco_trace_set_level(MCO_TRACE_ERROR);
...
}
环境变量
有三个环境变量用于确定跟踪行为。这些变量适用于任何与库 mcotrace
链接的应用程序。
MCO_TRACE:跟踪将启用并输出到标准错误流
stderr
。MCO_TRACE_FILE:跟踪信息将被设置到指定的文件中。例如:
MCO_TRACE_FILE=trace.dbg
MCO_TRACE_LEVEL:设置跟踪的默认级别。有效的值请参考“跟踪严重程度”。
MCO_TRACE_FORMAT:设置跟踪的默认级别。例如:
MCO_TRACE_FORMAT="my %m trace %t message %x" xsql
MCO_TRACE_MODULE:可以指定要跟踪的模块列表(用空格、逗号或分号分隔)。有效的模块请参考下文“跟踪框架模块”。
跟踪严重程度
在 mco.h
中,严重程度定义如下:
typedef enum
{
MCO_TRACE_FATAL = 0,
MCO_TRACE_ERROR,
MCO_TRACE_WARNING,
MCO_TRACE_NOTICE,
MCO_TRACE_INFO,
MCO_TRACE_DEBUG,
MCO_TRACE_VERBOSE
} mco_severity;
跟踪框架模块
在 mco.h
中,跟踪框架模块通过 mco_trace_module
定义如下:
typedef enum
{
MCO_TRACE_BSE,
MCO_TRACE_LAYOUT,
MCO_TRACE_ORDER,
MCO_TRACE_DISK,
MCO_TRACE_TMGR,
MCO_TRACE_CONN,
MCO_TRACE_DBINST,
MCO_TRACE_ALLOCATOR,
MCO_TRACE_INDEX,
MCO_TRACE_BTREE,
MCO_TRACE_KDTREE,
MCO_TRACE_PTREE,
MCO_TRACE_RTREE,
MCO_TRACE_TRIGRAM,
MCO_TRACE_HASH,
MCO_TRACE_PATTERN,
MCO_TRACE_CRYPT,
MCO_TRACE_ZIP,
MCO_TRACE_CURSOR,
MCO_TRACE_WRAPPER,
MCO_TRACE_XML,
MCO_TRACE_BLOB,
MCO_TRACE_DDL,
MCO_TRACE_SQL,
MCO_TRACE_RSQL,
MCO_TRACE_TL,
MCO_TRACE_SEQ,
MCO_TRACE_FILE,
MCO_TRACE_SYNC,
MCO_TRACE_BACKUP,
MCO_TRACE_HA,
MCO_TRACE_CLUSTER,
MCO_TRACE_ODBC,
MCO_TRACE_PYTHON,
MCO_TRACE_LUA,
MCO_TRACE_JNI,
MCO_TRACE_SAL,
MCO_TRACE_NETWORK,
MCO_TRACE_SHMEM,
MCO_TRACE_TRACE,
MCO_TRACE_PERF,
MCO_TRACE_UDA,
MCO_TRACE_XSQL,
MCO_IOT
} mco_trace_module;
格式说明符
%t - 消息时间
%m - 模块
%i - 线程 ID
%s - 严重程度
%f - 源代码文件
%l - 源代码行
%e - 错误文本
%r - 打印错误号
%R - 打印带有字符串表示的错误号