日志记录

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

许多问题的根本原因可以通过分析 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