Spec-Zone .ru
спецификации, руководства, описания, API

22.2.5.14. Используя MySQL Исходный объект Трассировки Connector/Net

MySQL 6.2 представленной поддержки Connector/Net.NET 2.0 совместимых трассировки, использование TraceSource объекты.

.NET 2.0 архитектуры трассировки состоит из четырех основных частей:

Использовать трассировку a TraceSource возразите первым потребностям, которые будут создаваться. Создать a TraceSource объект в MySQL, Connector/Net, Вы использовали бы код, подобный следующему:

TraceSource ts = new TraceSource("mysql");

Чтобы включить сообщениям трассировки, сконфигурируйте переключатель трассировки. Есть три основных класса переключателя, BooleanSwitch, SourceSwitch, и TraceSwitch. Переключатели трассировки также связали с ними перечисление уровня трассировки, они Off, Error, Warning, Info, и Verbose. Следующий фрагмент кода иллюстрирует создание переключателя:

ts.Switch = new SourceSwitch("MySwitch", "Verbose");

Это создает a SourceSwitch, вызванный MySwitch, и устанавливает уровень трассировки в Verbose, подразумевать, что все сообщения трассировки будут записаны.

Удобно быть в состоянии изменить уровень трассировки, не имея необходимость перекомпилировать код. Это достигается, определяя уровень трассировки в конфигурационном файле приложения, app.config. Вы тогда просто должны определить требуемый уровень трассировки в конфигурационном файле и перезапустить приложение. Источник трассировки конфигурируется в пределах system.diagnostics раздел файла. Следующий отрывок XML иллюстрирует это:

<configuration>  ...  <system.diagnostics>    <sources>      <source name="mysql" switchName="MySwitch"              switchType="System.Diagnostics.SourceSwitch" />      ...    </sources>    <switches>      <add name="MySwitch" value="Verbose"/>      ...    </switches>  </system.diagnostics>  ...</configuration>

По умолчанию трассировочная информация пишется Окну вывода Microsoft Visual Studio. Есть широкий диапазон слушателей, которые могут быть привязаны к источнику трассировки, так, чтобы сообщения трассировки могли быть выписаны различным местам назначения. Можно также создать пользовательских слушателей, чтобы позволить сообщениям трассировки быть записанными другим местам назначения как мобильные устройства и веб-сервисы. Обычно используемый пример слушателя ConsoleTraceListener, который пишет сообщения трассировки в консоль.

Чтобы добавить слушателя во времени выполнения, используйте код, такой как следующее:

ts.Listeners.Add(new ConsoleTraceListener());

Затем, вызовите методы на исходном объекте трассировки, чтобы генерировать трассировочную информацию. Например, TraceInformation(), TraceEvent(), или TraceData() методы могут использоваться.

TraceInformation() метод просто печатает строку, которую передают в качестве параметра. TraceEvent() метод, так же как дополнительная информационная строка, требует a TraceEventType значение, которое передадут, чтобы указать на трассировку, передает тип, и также специализированный ID. TraceEventType может иметь значение Verbose, Information, Warning, Error, и Critical. Используя TraceData() метод можно передать любой объект, например объект исключения, вместо сообщения.

Гарантировать чем эти сгенерированные сообщения трассировки сбрасывается от исходных буферов трассировки до слушателей, вызовите Flush() метод. Когда Вы заканчиваетесь, используя источник трассировки, вызовите Close() метод. Close() метод сначала вызывает Flush(), гарантировать любые остающиеся данные выписывается. Это тогда освобождает ресурсы, и закрывает слушателей, связанных с источником трассировки.

ts.TraceInformation("Informational message");ts.TraceEvent(TraceEventType.Error, 3, "Optional error message");ts.TraceData(TraceEventType.Error, 3, ex); // pass exception objectts.Flush();...ts.Close();

22.2.5.14.1. Просмотр MySQL Trace Information

Этот раздел описывает, как установить Ваше приложение, чтобы просмотреть трассировочную информацию MySQL.

Первая вещь, которую Вы должны сделать, создают подходящее app.config файл для Вашего приложения. Пример показывают в следующем коде:

<?xml version="1.0" encoding="utf-8" ?><configuration>  <system.diagnostics>    <sources>      <source name="mysql" switchName="SourceSwitch"        switchType="System.Diagnostics.SourceSwitch" >        <listeners>          <add name="console" />          <remove name ="Default" />        </listeners>      </source>    </sources>    <switches>      <!-- You can set the level at which tracing is to occur -->      <add name="SourceSwitch" value="Verbose" />      <!-- You can turn tracing off -->      <!--add name="SourceSwitch" value="Off" -->    </switches>    <sharedListeners>      <add name="console"        type="System.Diagnostics.ConsoleTraceListener"        initializeData="false"/>    </sharedListeners>  </system.diagnostics></configuration>

Это гарантирует, что подходящий источник трассировки создается, наряду с переключателем. Уровень переключателя в этом случае устанавливается в Verbose вывести на экран максимальное количество информации.

В приложении должен добавить единственный другой требуемый шаг logging=true к строке подключения. Приложение в качестве примера могло быть:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using MySql.Data;using MySql.Data.MySqlClient;using MySql.Web;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string connStr = "server=localhost;user=root;database=world;port=3306;password=******;logging=true;";            MySqlConnection conn = new MySqlConnection(connStr);            try            {                Console.WriteLine("Connecting to MySQL...");                conn.Open();                string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";                MySqlCommand cmd = new MySqlCommand(sql, conn);                MySqlDataReader rdr = cmd.ExecuteReader();                while (rdr.Read())                {                    Console.WriteLine(rdr[0] + " -- " + rdr[1]);                }                rdr.Close();                conn.Close();            }            catch (Exception ex)            {                Console.WriteLine(ex.ToString());            }            Console.WriteLine("Done.");        }    }}

Это простое приложение тогда генерирует следующий вывод:

Connecting to MySQL...mysql Information: 1 : 1: Connection Opened: connection string = 'server=localhost;User Id=root;database=world;port=3306;password=******;logging=True'mysql Information: 3 : 1: Query Opened: SHOW VARIABLESmysql Information: 4 : 1: Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1mysql Information: 5 : 1: Resultset Closed. Total rows=272, skipped rows=0, size (bytes)=7058mysql Information: 6 : 1: Query Closedmysql Information: 3 : 1: Query Opened: SHOW COLLATIONmysql Information: 4 : 1: Resultset Opened: field(s) = 6, affected rows = -1, inserted id = -1mysql Information: 5 : 1: Resultset Closed. Total rows=127, skipped rows=0, size (bytes)=4102mysql Information: 6 : 1: Query Closedmysql Information: 3 : 1: Query Opened: SET character_set_results=NULLmysql Information: 4 : 1: Resultset Opened: field(s) = 0, affected rows = 0, inserted id = 0mysql Information: 5 : 1: Resultset Closed. Total rows=0, skipped rows=0, size (bytes)=0mysql Information: 6 : 1: Query Closedmysql Information: 10 : 1: Set Database: worldmysql Information: 3 : 1: Query Opened: SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'mysql Information: 4 : 1: Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1American Samoa -- George W. BushAustralia -- Elisabeth II...Wallis and Futuna -- Jacques ChiracVanuatu -- John BaniUnited States Minor Outlying Islands -- George W. Bushmysql Information: 5 : 1: Resultset Closed. Total rows=28, skipped rows=0, size (bytes)=788mysql Information: 6 : 1: Query ClosedDone.mysql Information: 2 : 1: Connection Closed

Первое число, выведенное на экран в сообщении трассировки, соответствует типу события MySQL:

Событие Описание
1 ConnectionOpened: строка подключения
2 ConnectionClosed:
3 QueryOpened: сервер mysql распараллеливает идентификатор, текст запроса
4 ResultOpened: полевое количество, строки, на которые влияют (-1, если избранный), вставленный идентификатор (-1, если избранный)
5 ResultClosed: строки итогов читают, пропущенные строки, размер набора результатов в байтах
6 QueryClosed:
7 StatementPrepared: подготовленный sql, идентификатор оператора
8 StatementExecuted: идентификатор оператора, mysql идентификатор потока сервера
9 StatementClosed: идентификатор оператора
10 NonQuery: [изменяется]
11 UsageAdvisorWarning: советник по вопросам использования флаг. NoIndex = 1, BadIndex = 2, SkippedRows = 3, SkippedColumns = 4, FieldConversion =5.
12 Предупреждение: уровень, код, сообщение
13 Ошибка: код ошибки, сообщение об ошибке

Второе число, выведенное на экран в сообщении трассировки, является количеством соединения.

Хотя этот пример использует ConsoleTraceListener, любой из других стандартных слушателей, возможно, использовался. Другая возможность состоит в том, чтобы создать пользовательского слушателя, который использует переданное использование информации TraceEvent метод. Например, пользовательский приемник трассировки мог быть создан, чтобы выполнить активный контроль сообщений о событиях MySQL, вместо того, чтобы просто писать их в устройство вывода.

Также возможно добавить слушателей MySQL Trace Source во времени выполнения. Это может быть сделано со следующим кодом:

MySqlTrace.Listeners.Add(new ConsoleTraceListener());

MySQL, Connector/Net 6.3.2, представлял возможность включить трассировку и прочь во времени выполнения. Это может быть достигнуто, используя вызовы MySqlTrace.EnableQueryAnalyzer(string host, int postInterval) и MySqlTrace.DisableQueryAnalyzer(). Параметр host URL сервера Монитора MySQL Enterprise, чтобы контролировать. Параметр postInterval то, как часто отправить данные на Монитор MySQL Enterprise в секундах.

22.2.5.14.2. Создающие Пользовательские Слушатели

Чтобы создать пользовательских слушателей, которые работают с MySQL Источник Трассировки Connector/Net, необходимо понять ключевые методы, используемые, и используемые форматы данных события.

Основной метод, включенный мимоходом, прослеживает сообщения, 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 общедоступное перечисление, содержавшееся в MySQL код Connector/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. Однако, переданное использование первого параметра этого списка всегда является идентификатором драйвера. Идентификатор драйвера является уникальным числом, которое постепенно увеличивается каждый раз, когда соединитель открывается. Это позволяет группам запросов на том же самом соединении быть идентифицированными. Параметры, которые следуют за идентификатором драйвера, зависят от идентификатора события MySQL, и следующим образом:

Специфичный для MySQL тип события Параметры (params Объект [] args)
ConnectionOpened Строка подключения
ConnectionClosed Никакие дополнительные параметры
QueryOpened сервер mysql распараллеливает идентификатор, текст запроса
ResultOpened полевое количество, строки, на которые влияют (-1, если избранный), вставленный идентификатор (-1, если избранный)
ResultClosed строки итогов читают, пропущенные строки, размер набора результатов в байтах
QueryClosed Никакие дополнительные параметры
StatementPrepared подготовленный sql, идентификатор оператора
StatementExecuted идентификатор оператора, mysql идентификатор потока сервера
StatementClosed идентификатор оператора
NonQuery Изменяется
UsageAdvisorWarning советник по вопросам использования флаг. NoIndex = 1, BadIndex = 2, SkippedRows = 3, SkippedColumns = 4, FieldConversion = 5.
Предупреждение уровень, код, сообщение
Ошибка код ошибки, сообщение об ошибке

Эта информация позволит Вам создавать пользовательские приемники трассировки, которые могут активно следить за развитием специфичных для MySQL событий.