在 Visual Basic 中使用应用程序日志

通过 My.Application.LogMy.Log 对象,可以轻松地将日志记录和跟踪信息写入日志。

如何记录消息

首先,通过日志的 Switch 属性的 TraceSource 属性检查消息的严重性。 默认情况下,只有严重性级别为“信息”及以上的消息才会传递到日志的 TraceListener 集合中指定的跟踪侦听器。 然后,每个侦听器将消息的严重性与侦听器 Switch 的属性进行比较。 如果消息的严重性足够高,侦听器会写出消息。

下图演示如何将写入 WriteEntry 方法的消息传递到日志的跟踪侦听器的 WriteLine 方法:

显示 My 日志调用的图。

可以通过更改应用程序的配置文件来更改日志和跟踪侦听器的行为。 下图显示了日志部分与配置文件之间的对应关系。

显示“我的日志配置”的示意图。

记录消息的位置

如果程序集没有配置文件,则 My.Application.LogMy.Log 对象通过 DefaultTraceListener 类写入应用程序的调试输出。 此外,My.Application.Log 对象通过 FileLogTraceListener 类将数据写入程序集的日志文件,而 My.Log 对象通过 WebPageTraceListener 类将数据写入 ASP.NET 网页的输出。

在调试模式下运行应用程序时,可以在 Visual Studio 输出窗口中查看调试 输出 。 若要打开 “输出 ”窗口,请单击 “调试” 菜单项,指向 Windows,然后单击“ 输出”。 在“输出”窗口中,从“显示输出”框中选择“调试”。

默认情况下, My.Application.Log 在用户应用程序数据的路径中写入日志文件。 可以从FullLogFileName对象的DefaultFileLogWriter属性获取路径。 该路径的格式如下所示:

BasePath\CompanyName\ProductName\ProductVersion

一个典型的BasePath值如下所示。

C:\Documents and Settings\username\Application Data

的值CompanyNameProductName以及ProductVersion来自应用程序的程序集信息。 日志文件名称的形式是 AssemblyName.log,其中 AssemblyName 是程序集的文件名,没有扩展名。 如果需要多个日志文件(例如当应用程序尝试写入日志时原始日志不可用时),则日志文件名称的表单是 AssemblyName-迭代.log,其中为 iterationInteger数。

可以通过添加或更改计算机和应用程序的配置文件来替代默认行为。 有关详细信息,请参阅 演练:更改 My.Application.Log 写入信息的位置

配置日志设置

Log 对象具有一个没有应用程序配置文件的默认实现,app.config。若要更改默认值,必须使用新设置添加配置文件。 有关更多信息,请参见 Walkthrough: Filtering My.Application.Log Output

日志配置部分位于 <system.diagnostics> 节点当中,该节点位于 app.config 文件的 <configuration> 节点之下。 日志信息在多个节点中定义:

  • 对象的 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对象上。 系统仅在任何特定对象中检查配置文件一次, 这是应用程序首次创建该对象时。 因此,可能需要重启应用程序,使更改生效。

在已部署的应用程序中,通过在应用程序启动之前重新配置开关对象来启用跟踪代码。 通常,这涉及到打开和关闭开关对象,或者通过更改跟踪级别,然后重启应用程序。

安全注意事项

将数据写入日志时,请考虑以下事项:

  • 避免泄露用户信息。 确保应用程序仅将已批准的信息写入日志。 例如,应用程序日志可以接受包含用户名,但不能包含用户密码。

  • 确保日志位置安全。 任何包含潜在敏感信息的日志都应存储在安全的位置。

  • 避免误导性信息。 通常,应用程序应在使用该数据之前验证用户输入的所有数据。 这包括将数据写入应用程序日志。

  • 避免拒绝服务。 如果应用程序将太多信息写入日志,则它可以填充日志或使查找重要信息变得困难。

另请参阅