使用 Application 日志 (Visual Basic)

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

如何记录消息

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

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

Diagram that shows My log call.

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

Diagram that shows My log configuration.

记录消息的位置

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

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

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

BasePath\CompanyName\ProductName\ProductVersion

BasePath 的典型值如下所示:

C:\Documents and Settings\username\Application Data

CompanyNameProductNameProductVersion 的值来自应用程序的程序集信息。 日志文件名称的格式为 AssemblyName.log,其中 AssemblyName 是程序集的文件名称(不含扩展名)。 如果需要多个日志文件(如原始日志不可用或应用程序尝试写入日志时),日志文件名称的格式为 AssemblyName-iteration.log,其中 iteration 为一个正 Integer

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

配置日志设置

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

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

  • Log 对象的侦听器在名为 DefaultSource 的 <sources> 节点中定义。

  • Log 对象的严重性筛选器在名为 DefaultSource 的 <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 对象时会发生这种情况。 对于任何特定的对象,系统将仅检查一次配置文件,即应用程序首次创建对象时。 因此,可能需要重启应用程序以使更改生效。

在已部署的应用程序中,在应用程序未运行之前,可以通过重新配置 switch 对象启用跟踪代码。 通常,此过程将要求启用和禁用 switch 对象、更改跟踪级别,以及重启应用程序。

安全注意事项

将数据写入日志时应注意以下事项:

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

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

  • 避免误导性信息。 一般情况下,应用程序应先验证用户输入的所有数据,然后再使用这些数据。 其中包括将数据写入应用程序日志。

  • 避免拒绝服务。 如果应用程序将太多的信息写入日志,则可能填满日志或导致难以查找重要的信息。

另请参阅