次の方法で共有


Visual Basic でのアプリケーション ログの使用

My.Applicaton.Log オブジェクトおよび My.Log オブジェクトを使用すると、ログおよびトレースの情報をログに簡単に書き込むことができます。

メッセージがログに記録される手順

最初に、ログの TraceSource プロパティの Switch プロパティで、メッセージの重大度レベルがチェックされます。 既定では、重大度レベルが "情報" 以上のメッセージだけが、ログの TraceListener コレクションで指定されたトレース リスナーに渡されます。 次に各リスナーは、メッセージの重大度レベルを、リスナーの Switch プロパティと比較します。 メッセージの重大度レベルが十分に高い場合には、リスナーはメッセージを書き込みます。

次の図は、WriteEntry メソッドに書き込まれたメッセージが、ログのトレース リスナーの WriteLine メソッドにどのように渡されるかを示しています。

My ログ呼び出し

アプリケーションの構成ファイルを変更すると、ログおよびトレース リスナーの動作を変更できます。 次の図は、ログと構成ファイルの各部分の対応を示します。

My ログ構成

メッセージが記録される場所

アセンブリに構成ファイルがない場合、My.Application.Log オブジェクトと My.Log オブジェクトは DefaultTraceListener クラスを介してアプリケーションのデバッグ出力への書き込みを行います。 また、My.Application.Log オブジェクトは FileLogTraceListener クラスを介してアセンブリのログ ファイルへの書き込みを行い、My.Log オブジェクトは、WebPageTraceListener クラスを介して ASP.NET Web ページの出力への書き込みを行います。

デバッグ出力は、アプリケーションをデバッグ モードで実行中のときに、Visual Studio の [出力] ウィンドウで参照できます。 [出力] ウィンドウを開くには、[デバッグ] メニュー項目をクリックし、[ウィンドウ] をポイントして、[出力] をクリックします。 [出力] ウィンドウで、[出力元の表示] ボックスの [デバッグ] を選択します。

既定では、My.Application.Log がログ ファイルを書き込む先は、ユーザーのアプリケーション データ用のパスです。 このパスは、DefaultFileLogWriter オブジェクトの FullLogFileName プロパティから取得できます。 このパスの形式は次のとおりです。

BasePath\CompanyName\ProductName\ProductVersion

BasePath の一般的な値は次のとおりです。

C:\Documents and Settings\username\Application Data

CompanyName、ProductName、および ProductVersion の値は、アプリケーションのアセンブリ情報から取得されます。 ログ ファイル名の形式は AssemblyName.log です。AssemblyName は、アセンブリのファイル名から拡張子を取り除いたものです。 複数のログ ファイルが必要な場合 (たとえば、アプリケーションがログに書き込もうとしているときで、元のログが利用できない場合) には、ログ ファイル名の形式は AssemblyName-iteration.log となります。iteration は正の Integer です。

コンピューターおよびアプリケーションの構成ファイルを追加または変更すると、既定の動作をオーバーライドできます。 詳細については、「チュートリアル: My.Application.Log による情報の書き込み先の変更 (Visual Basic)」を参照してください。

ログ設定を構成する

Log オブジェクトの既定の実装では、アプリケーション構成ファイル app.config がなくても動作するようになっています。 既定の動作を変更するには、新しい設定を記述した構成ファイルを追加する必要があります。 詳細については、「チュートリアル: My.Application.Log の出力のフィルター処理 (Visual Basic)」を参照してください。

app.config ファイルでは、ログの構成セクションは、メインの <configuration> ノードの <system.diagnostics> ノードにあります。 ログ情報は、以下のノードに定義されています。

  • Log オブジェクトのリスナーは、DefaultSource という名前の <sources> ノードで定義されています。

  • Log オブジェクトの重大度レベル フィルターは、DefaultSwitch という名前の <switches> ノードで定義されています。

  • ログ リスナーは <sharedListeners> ノードで定義されています。

次のコードに、<sources>、<switches>、および <sharedListeners> の各ノードの例を示します。

<configuration>
  <system.diagnostics>
    <sources>
      <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
          <add name="FileLog"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
      <add name="FileLog"
        type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
          Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, 
          PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
        initializeData="FileLogWriter"
      />
    </sharedListeners>
  </system.diagnostics>
</configuration>

配置後のログ設定の変更

アプリケーションを開発すると、その構成の設定は、上記の例のように、app.config ファイルに格納されます。 アプリケーションを配置した後でも、構成ファイルを編集することで、ログを構成できます。 Windows ベースのアプリケーションでは、このファイルの名前は applicationName.exe.config で、実行可能ファイルと同じフォルダーに存在する必要があります。 Web アプリケーションの場合は、プロジェクトに関連付けられた Web.config ファイルになります。

アプリケーションは、クラスのインスタンスを作成するコードを初めて実行するときに、そのオブジェクトについての情報を構成ファイルでチェックします。 Log オブジェクトの場合は、Log オブジェクトに初めてアクセスするときにそれを行います。 各オブジェクトについて、システムが構成ファイルをチェックするのは、アプリケーションがそのオブジェクトを最初に作成するときの 1 回だけです。 したがって、変更を有効にするためには、アプリケーションの再起動が必要な場合があります。

配置されたアプリケーションでは、アプリケーションの起動前にスイッチ オブジェクトを再設定することで、トレース コードを有効にできます。 この作業では、通常、スイッチ オブジェクトのオンとオフを切り替えるか、またはトレース レベルを変更し、その後アプリケーションを再起動します。

セキュリティの考慮事項

ログにデータを書き込むときには、次の点を考慮する必要があります。

  • **ユーザー情報を漏らさないようにします。**アプリケーションでは、認められた情報のみをログに書き込むようにします。 たとえば、アプリケーション ログにユーザー名を書き込んでも問題ないとしても、ユーザーのパスワードを書き込むのは問題です。

  • **ログは安全な場所に配置します。**機密性の高い情報を含む可能性のあるログは、安全な場所に格納する必要があります。

  • **不正な情報は避けます。**一般に、アプリケーションでは、ユーザーが入力したデータは、使用する前にすべて検証する必要があります。 これは、アプリケーション ログにデータを書き込むときも同じです。

  • **サービスが滞らないようにします。**アプリケーションがログに書き込む情報が多すぎると、ログが満杯になったり、重要な情報を見つけにくくなったりする可能性があります。

参照

参照

Microsoft.VisualBasic.Logging.Log

概念

アプリケーションからの情報のログ記録 (Visual Basic)