NLog 2.0を使用してC#アプリケーションをFireBird Embeddedデータベースに記録する

C#で最初のデスクトップアプリケーションを始めて、ロギングについて考えました。 このトピックに関する提案を検討し、良いレビューと使用料の不足のために、私の選択はNLog 2.0に落ちました。 サイトのドキュメントとローカルの記事を読んだ後、テキストファイルへのデバッグ情報の出力を簡単に構成しました。 しかし、探究心はまだ止まっておらず、私のアプリケーションはFireBird Embeddedデータベースを使用しているので、ログインを構成することにしました。 これは私が5時間のパズルを得たところです。 FireBird用のNLogの設定に関する情報はほとんどありません(埋め込みかどうかは大きな役割を果たします)。存在するものはNLogの以前のバージョンに関連しており、すでに関連性を失っています。 袖をまくり、ケフィアを詰め込んで、この記事の目的であるこの障害を克服し始めました。



この記事は、FireBird .Netプロバイダーのプロジェクトへの接続、およびNLogの初期インストールには影響しないことに注意してください。



NLogの設定は、XMLファイルであるNLog.configファイルを適切に設定することです。 最初のカップルでは、​​ロギングシステムをオンにした後、プロジェクトの起動が停止し、アプリケーションのメインフォームの初期化に失敗するという問題に遭遇しました。 この理由は、NLogが適切に構成されていなかったためです。 タスクを簡素化して神経を節約するには、構成ファイルに2行追加する必要があります。



throwExceptions="true"

internalLogFile="file.txt"







次回アプリケーションを起動すると、実行可能ファイルのあるフォルダーにfile.txtが作成されます。このファイルには、NLogシステム自体のかなり詳細なログが含まれており、構成エラーをキャッチできます。

ログの「受信者」の設定は、タグ「target」にあります。 最も困難なことは、3つのものを取得することでした:

1)トークン付きのDBMSプロバイダー名

2)DB接続文字列

3)データベースとそのパラメーターへのリクエスト



最初のポイントは、Googleの助けを借りて克服されました。 しかし、2番目と3番目の段落では、より困難でした。 アプリケーションから接続文字列を取得しました。これは、他のマニュアルに基づいて、すでにFireBirdデータベースに接続できます。 あまり科学的ではない「poke」メソッドを使用して、リクエストとそのパラメーターを整理しました。 苦労しないように、すぐに機能する「レシーバー」設定を使用します。

< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >




* This source code was highlighted with Source Code Highlighter .









< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >




* This source code was highlighted with Source Code Highlighter .









< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >




* This source code was highlighted with Source Code Highlighter .












dbProviderはFireBird .NETプロバイダーの名前で、現在の公式バージョン2.6.5に対応しています。 将来のバージョンでは、数字のみを変更する必要があり、トークン(PublicKeyToken = 3750abcc3150b00c)は同じままである必要があります。



connectionStringは接続文字列です。 概して、それが形成されるとき、自分自身のためにその中の何かを理解し、変更することは難しくありません。 この例では、接続はFireBird Embeddedサーバー、FYT.FDBデータベースで構成されます。FYT.FDBデータベースは、実行可能ファイルのあるディレクトリにあります。 FireBird ClassicまたはSuperServerの場合、「サーバータイプ」と「クライアントライブラリ」を変更するだけです。



commandText-データベースにデータを挿入する要求。 ロガーによって送信されるパラメーターは、「犬」、つまり @。 以下では、「パラメーター」タグの属性は、リクエストの各パラメーターを置き換える必要があるNLogを示しています。 利用可能なすべてのレイアウトオプションのリストは、NLog Webサイトにあります。



結論として、構成ファイルNLog.configの完全なリストを提供します。

<? xml version ="1.0" encoding ="utf-8" ? >

< nlog xmlns ="http://www.nlog-project.org/schemas/NLog.xsd"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

throwExceptions ="true"

internalLogFile ="file.txt">



< targets >

< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >

</ targets >



< rules >

< logger name ="*" minlevel ="Debug" writeTo ="db" final ="true" />

</ rules >

</ nlog >




* This source code was highlighted with Source Code Highlighter .









<? xml version ="1.0" encoding ="utf-8" ? >

< nlog xmlns ="http://www.nlog-project.org/schemas/NLog.xsd"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

throwExceptions ="true"

internalLogFile ="file.txt">



< targets >

< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >

</ targets >



< rules >

< logger name ="*" minlevel ="Debug" writeTo ="db" final ="true" />

</ rules >

</ nlog >




* This source code was highlighted with Source Code Highlighter .









<? xml version ="1.0" encoding ="utf-8" ? >

< nlog xmlns ="http://www.nlog-project.org/schemas/NLog.xsd"

xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

throwExceptions ="true"

internalLogFile ="file.txt">



< targets >

< target

xsi:type ="Database"

name ="db"

dbProvider ="FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"

useTransactions ="true"

connectionString ="server type=Embedded;initial catalog=FYT.FDB;character set=WIN1251;dialect=3;client library=fbembed.dll;user id=SYSDBA;password=masterkey"

keepConnection ="true"

commandText ="INSERT INTO logs (DT, LOG_TEXT, LEVEL_ID, CLASS, STACK_TRACE) values (@DT, @LOG_TEXT, @LEVEL_ID, @CLASS, @STACK_TRACE);" >

< parameter layout ="${longdate}" name ="@DT" />

< parameter layout ="${level}" name ="@LEVEL" />

< parameter layout ="${message}" name ="@LOG_TEXT" />

< parameter layout ="${logger}" name ="@CLASS" />

< parameter layout ="${stacktrace}" name ="@STACK_TRACE" />

</ target >

</ targets >



< rules >

< logger name ="*" minlevel ="Debug" writeTo ="db" final ="true" />

</ rules >

</ nlog >




* This source code was highlighted with Source Code Highlighter .












ご清聴ありがとうございました! 私の記事が、FireBirdデータベースにログシステムをセットアップするのに5時間を費やさないようにするのに役立つことを願っています!



All Articles