5.12.2 构建自定义监听器

要构建使用 MySQL Connector/NET Trace Source 的自定义侦听器,有必要了解使用的关键方法和使用的事件数据格式。

传递跟踪消息所涉及的主要方法是 TraceSource.TraceEvent方法。这有原型:

public void TraceEvent(
    TraceEventType eventType,
    int id,
    string format,
    params Object[] args
)

此跟踪源方法将处理附加侦听器列表并调用侦听器的 TraceListener.TraceEvent方法。该TraceListener.TraceEvent 方法的原型如下:

public virtual void TraceEvent(
    TraceEventCache eventCache,
    string source,
    TraceEventType eventType,
    int id,
    string format,
    params Object[] args
)

前三个参数在 Microsoft 定义的标准中使用。最后三个参数包含 MySQL 特定的跟踪信息。现在更详细地讨论这些参数中的每一个。

int id

这是 MySQL 特定的标识符。它标识已发生的 MySQL 事件类型,从而生成跟踪消息。该值由 MySqlTraceEventType连接器/NET 代码中包含的公共枚举定义:

public enum MySqlTraceEventType : int
{
    ConnectionOpened = 1,
    ConnectionClosed,
    QueryOpened,
    ResultOpened,
    ResultClosed,
    QueryClosed,
    StatementPrepared,
    StatementExecuted,
    StatementClosed,
    NonQuery,
    UsageAdvisorWarning,
    Warning,
    Error
}

MySQL 事件类型还决定了使用参数传递的内容params Object[] args。参数的性质args在以下材料中有更详细的描述。

string format

这是包含零个或多个格式项的格式字符串,对应于 args 数组中的对象。这将由侦听器使用,例如 ConsoleTraceListener将消息写入输出设备。

params Object[] args

这是一个依赖于 MySQL 事件类型的对象列表, id. 但是,使用此列表传递的第一个参数始终是驱动程序 ID。驱动程序 ID 是唯一的编号,每次打开连接器时都会递增。这可以识别同一连接上的查询组。driver id 后面的参数取决于MySQL event id,如下:

MySQL 特定的事件类型 参数(params Object[] args)
连接打开 连接字符串
连接已关闭 无附加参数
查询打开 mysql服务器线程id,查询文本
结果打开 字段计数、受影响的行(如果选择 -1)、插入的 ID(如果选择 -1)
结果关闭 读取的总行数、跳过的行数、结果集的大小(以字节为单位)
查询关闭 无附加参数
StatementPrepared 准备好的sql,语句id
语句执行 statement id,mysql服务器线程id
报表关闭 声明编号
非查询 变化
使用顾问警告 使用顾问标志。NoIndex = 1,BadIndex = 2,SkippedRows = 3,SkippedColumns = 4,FieldConversion = 5。
警告 级别、代码、消息
错误 错误编号,错误信息

此信息将允许您创建可以主动监视 MySQL 特定事件的自定义跟踪侦听器。