日志记录

本指南将介绍如何为库配置日志记录。

许多问题的根本原因可以通过分析 DotNetBrowser 日志消息来检测。

默认情况下,禁用登录 DotNetBrowser。 但是,如果您遇到问题或观察到一些意外行为,我们建议您执行以下操作: 1. 配置 DotNetBrowser 以将所有日志消息保存到一个文件中。 2. 重现问题。 3. 提交包含收集的日志消息的票证以供进一步调查。

日志记录级别

DotNetBrowser 支持以下日志记录级别: All > Verbose > Information > Warning > Error > Critical > Off.

Off 级别可用于完全关闭日志记录, All 用于启用所有消息的日志记录,包括来自 Chromium 的消息。

您可以使用 LoggerProvider.Instance.Level 属性更改日志记录级别。

有关日志记录级别的更多信息,请参阅 MSDN 说明

示例:设置日志记录级别

要保存日志记录级别为 Verbose 和更高级别的所有日志消息,请使用 DotNetBrowser 日志记录 API,如以下代码示例所示:

using DotNetBrowser.Logging;
using System.Diagnostics;
// ...
LoggerProvider.Instance.Level = SourceLevels.Verbose;
Imports DotNetBrowser.Logging
Imports System.Diagnostics
' ...
LoggerProvider.Instance.Level = SourceLevels.Verbose

将日志记录到一个文件中

要将所有日志消息打印到文件,请使用 DotNetBrowser Logging API 的 LoggerProvider.Instance.FileLoggingEnabled 属性,如以下代码示例所示:

using DotNetBrowser.Logging;
// ...
LoggerProvider.Instance.FileLoggingEnabled = true;
LoggerProvider.Instance.OutputFile = "C:\\log.txt";
Imports DotNetBrowser.Logging
' ...
LoggerProvider.Instance.FileLoggingEnabled = True
LoggerProvider.Instance.OutputFile = "C:\log.txt"

在以上示例中, LoggerProvider.Instance.OutputFile 属性的值表示存储日志消息的文件的绝对或相对路径。

重定向 DotNetBrowser 日志记录

DotNetBrowser 使用 TraceSource 进行日志记录。 可以将 DotNetBrowser 日志重定向到应用程序中使用的另一个记录器。 为此,您需要创建自己的类,该类派生自 TraceListener 并执行重定向。

例如,这就是 Serilog 的样子:

namespace Example
{
    public class SerilogTraceListener : TraceListener
    {
        private readonly string initializeData;
        private readonly Lazy<ILogger> logger;

        public SerilogTraceListener(string initializeData)
        {
            this.initializeData = initializeData;
            logger = new Lazy<ILogger>(() => Log.ForContext("Context", initializeData));
        }

        public override void Write(string message)
        {
            logger.Value.Information(message);
        }

        public override void WriteLine(string message)
        {
            logger.Value.Information(message);
        }
    }
}
Namespace Example
	Public Class SerilogTraceListener
		Inherits TraceListener

		Private ReadOnly initializeData As String
		Private ReadOnly logger As Lazy(Of ILogger)

		Public Sub New(ByVal initializeData As String)
			Me.initializeData = initializeData
			logger = New Lazy(Of ILogger)(Function()
				Return Log.ForContext("Context", initializeData)
			End Function)
		End Sub

		Public Overrides Sub Write(ByVal message As String)
			logger.Value.Information(message)
		End Sub

		Public Overrides Sub WriteLine(ByVal message As String)
			logger.Value.Information(message)
		End Sub
	End Class
End Namespace

然后,有必要为 TraceSource 配置跟踪监听器类。 例如,这可以通过 App.config 完成:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="Browser" switchValue="All">
        <listeners>
          <add name="SerilogTraceListener"
               type="Example.SerilogTraceListener, ExampleAssembly"
               initializeData="DotNetBrowser" />
        </listeners>
      </source>
      <source name="Process" switchValue="All">
        <listeners>
          <add name="SerilogTraceListener"
               type="Example.SerilogTraceListener, ExampleAssembly"
               initializeData="DotNetBrowser" />
        </listeners>
      </source>
      <source name="IPC" switchValue="All">
        <listeners>
          <add name="SerilogTraceListener"
               type="Example.SerilogTraceListener, ExampleAssembly"
               initializeData="DotNetBrowser" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
</configuration> 

您可以在相应的文章中找到有关配置跟踪监听器的更多信息:如何创建和初始化跟踪源

Go Top