Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL 6.2 представленной поддержки Connector/Net.NET 2.0 совместимых трассировки, использование TraceSource
объекты.
.NET 2.0 архитектуры трассировки состоит из четырех основных частей:
Источник - Это - инициатор трассировочной
информации. Источник используется, чтобы отправить сообщения трассировки. Имя источника, обеспеченного
MySQL, Connector/Net, mysql
.
Переключатель - Это определяет уровень
трассировочной информации, чтобы испустить. Как правило, это определяется в app.config
файл, так, чтобы не было необходимо перекомпилировать приложение, чтобы изменить уровень трассировки.
Слушатель - Приемники трассировки определяют, где трассировочная информация будет записана. Поддерживаемые слушатели включают, например, Окно вывода Visual Studio, Windows Event Log, и консоль.
Фильтр - Фильтры могут быть присоединены к слушателям. Фильтры определяют уровень трассировочной информации, которая будет записана. В то время как переключатель определяет уровень информации, которая будет записана всем слушателям, фильтр может быть применен на основе на слушателя, давая более прекрасный гранулировал управление трассировочной информации.
Использовать трассировку 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();
Этот раздел описывает, как установить Ваше приложение, чтобы просмотреть трассировочную информацию 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 в
секундах.
Чтобы создать пользовательских слушателей, которые работают с 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)
Первые три параметра используются в стандарте как
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 событий.