HTTP 日志记录

有时,在调试 Web 应用程序(或使用 Necko 的客户端代码)时,记录 HTTP 流量可能很有用。这会将浏览器运行期间与 HTTP 相关的日志信息保存到一个文件中,您可以检查该文件(或者如果开发人员要求您提供日志,则将其上传到 Bugzilla)。

注意

注意:Web 控制台 还提供在 Firefox 中查看 HTTP 事务的功能。HTTP 日志记录通常提供更详细的日志记录。

使用 about:logging

这是执行 HTTP 日志记录的最佳且最简单的方法。在浏览器运行期间的任何时间点,您都可以打开和关闭日志记录。

注意

注意:在 Firefox 108 之前,日志记录 UI 用于位于 about:networking#logging

这允许您仅捕获浏览器行为的“有趣”部分(即您的错误),这使得 HTTP 日志更小且更易于分析。

  1. 启动浏览器并将其置于您在错误发生之前所需的任何状态。

  2. 打开一个新标签页,并在 URL 栏中输入“about:logging”。

  3. 如果您不喜欢默认设置,请调整日志文件的位置

  4. 调整您要记录的模块列表:此列表与 MOZ_LOG 环境变量具有完全相同的格式(请参见下文)。通常,默认列表是可以的,除非 Mozilla 开发人员告诉您修改它。

    • 对于 Cookie 问题,请使用预设 Cookies

    • 对于 WebSocket 问题,请使用预设 WebSockets

    • 对于 HTTP/3 或 QUIC 问题,请使用预设 HTTP/3

    • 对于其他网络问题,请使用预设 Networking

  5. 点击“开始记录”。

  6. 重现错误(即转到对您来说已损坏的网站并在浏览器中使错误发生)

  7. 记下“当前日志文件”的值。

  8. 点击“停止记录”。

  9. 转到包含指定日志文件的文件夹,并收集所有日志文件。您将看到几个看起来像这样的文件:log.txt-main.1806.moz_log、log.txt-child.1954.moz_log、log.txt-child.1970.moz_log 等。这是因为 Firefox 现在使用多个进程,并且每个进程都有自己的日志文件。

  10. 对于许多错误,“log.txt-main.moz_log”文件是您需要作为文件附件上传到 Bugzilla 错误报告的唯一内容(假设您正在记录以帮助 Mozilla 开发人员)。其他错误可能需要上传所有日志——如果您不确定,请咨询开发人员。

  11. 为自己鼓掌——干得好!感谢您帮助我们调试 Firefox。

注意

注意:日志可能包含敏感数据,例如 URL 和 Cookie。为了保护您的隐私,我们恳请您将日志文件或分析器链接直接且机密地发送到 necko@mozilla.com

通过手动设置环境变量记录 HTTP 活动

有时 about:logging 方法不起作用,例如,如果您的错误在启动期间发生,或者您在移动设备上运行等。在这种情况下,您可以在启动 Firefox *之前* 设置环境变量。请注意,此方法最终会记录整个浏览器历史记录,因此文件可能会变得相当大(它们可以很好地压缩:)

设置环境变量因操作系统而异。不要让看起来很吓人的命令行内容吓跑您;这根本不难!

Windows

  1. 如果 Firefox 正在运行,请退出。

  2. 通过按住 Windows 键并按下“R”来打开命令提示符。

  3. 键入 CMD 并按 Enter,将出现一个具有黑色背景的新命令提示符窗口。

  4. 将以下行逐行复制并粘贴到命令提示符窗口中。在每个之后按 Enter 键。
    对于 64 位 Windows
    set MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5
    set MOZ_LOG_FILE=%TEMP%\log.txt
    "c:\Program Files\Mozilla Firefox\firefox.exe"
    

    对于 32 位 Windows

    set MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5
    set MOZ_LOG_FILE=%TEMP%\log.txt
    "c:\Program Files (x86)\Mozilla Firefox\firefox.exe"
    

    (这些说明假设您将 Firefox 安装到默认位置,并且驱动器 C: 是您的 Windows 启动磁盘。如果不是这种情况,请进行相应的调整。)

  5. 重现您遇到的任何问题。

  6. 重现问题后,退出 Firefox 并查找临时目录中生成的日志文件。您可以直接在 Windows 资源管理器位置栏中键入“%TEMP%”以快速到达那里。

Linux

本节提供有关如何在 Linux 上运行的 Firefox 中捕获 HTTP 日志的信息。

  1. 如果 Firefox 正在运行,请退出。

  2. 打开一个新的 shell。此处列出的命令假定使用与 bash 兼容的 shell。

  3. 将以下命令逐行复制并粘贴到 shell 中。确保在每行之后按 Enter。

    export MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5
    export MOZ_LOG_FILE=/tmp/log.txt
    cd /path/to/firefox
    ./firefox
    
  4. 重现您正在调试的问题。

  5. 重现问题后,退出 Firefox 并查找生成的日志文件,您可以在 /tmp/log.txt 中找到它们。

macOS

这些说明显示了如何在 macOS 上的 Firefox 中记录 HTTP 流量。

  1. 如果 Firefox 当前正在运行,请使用“文件”菜单中的“退出”选项退出。请记住,简单地关闭所有窗口不会在 macOS 上退出 Firefox(这是 Mac 应用程序的标准做法)。

  2. 运行“终端”应用程序,该应用程序位于启动磁盘的“应用程序”文件夹中的“实用工具”子文件夹中。

  3. 将以下命令复制并粘贴到“终端”窗口中,在每行之后按 Return 键。

    export MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5
    export MOZ_LOG_FILE=~/Desktop/log.txt
    cd /Applications/Firefox.app/Contents/MacOS
    ./firefox
    

    (这些说明假设您已将 Firefox 直接安装到启动磁盘的“应用程序”文件夹中。如果您将其放在其他位置,请相应地更改第三行中使用的路径。)

  4. 重现您尝试调试的任何问题。

  5. 退出 Firefox 并查找桌面上生成的 log.txt 日志文件。

注意

注意:生成的日志文件使用 Unix 样式的行尾。旧版编辑器可能会遇到此问题,但如果您使用的是甚至相当现代的 Mac OS X 应用程序查看日志,则不会有任何问题。

使用命令行参数开始记录

从 Firefox 61 开始,可以使用比设置环境变量更简单的方法开始记录:使用命令行参数。这是一个 **Windows** 平台的示例,在其他平台上我们接受相同形式的参数

  1. 如果 Firefox 正在运行,请退出。

  2. 打开命令提示符。在 Windows XP 上,您可以在“开始”菜单的“所有程序”子菜单中找到“运行...”命令。在 所有较新版本的 Windows 上,您可以按住 Windows 键并按下“R”。

  3. 将以下行复制并粘贴到“运行”命令窗口中,然后按 Enter
    对于 32 位 Windows
    "c:\Program Files (x86)\Mozilla Firefox\firefox.exe" -MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5 -MOZ_LOG_FILE=%TEMP%\log.txt
    

    对于 64 位 Windows

    "c:\Program Files\Mozilla Firefox\firefox.exe" -MOZ_LOG=timestamp,rotate:200,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5 -MOZ_LOG_FILE=%TEMP%\log.txt
    

    (这些说明假设您将 Firefox 安装到默认位置,并且驱动器 C: 是您的 Windows 启动磁盘。如果不是这种情况,请进行相应的调整。)

  4. 重现您遇到的任何问题。

  5. 重现问题后,退出 Firefox 并查找临时目录中生成的日志文件。您可以直接在 Windows 资源管理器位置栏中键入“%TEMP%”以快速到达那里。

高级技巧

您可以调整上面列出的一些设置以更改记录的 HTTP 信息。

限制记录数据的规模

默认情况下,日志文件的大小没有限制,并且它们在整个 Firefox 运行期间(从开始到结束)捕获日志记录。这些文件可能会变得非常大(千兆字节)!因此,我们在 MOZ_LOG 中添加了一个“rotate:SIZE_IN_MB”选项(我们在上面的示例中使用它)。如果您使用的是 Firefox >= 51,则设置此选项仅保存最后 N MB 的日志记录数据,这有助于保持它们的大小易于管理。(未知模块将被忽略,因此即使您运行的是 Firefox <= 50,在您的环境中使用“rotate”也没关系:它不会做任何事情)。

这是通过将日志分成最多 4 个单独的文件来实现的(它们的文件名具有编号扩展名 .0、.1、.2、.3)日志记录后端循环它写入的文件,同时确保这些文件的大小总和永远不会超过指定的限制。

注释 1:**编号最大的文件不保证是最后写入的文件!**我们不移动文件,我们只循环。使用 rotate 模块会自动将时间戳添加到日志中,因此始终很容易识别哪个文件保存最新数据。

注释 2:**rotate 不支持追加**。当您指定 rotate 时,每次启动时都会删除所有文件(包括任何以前的非旋转日志文件),以避免任何信息混合。然后忽略指定的 append 模块。

如果您的浏览器崩溃或挂起,请使用“sync”

默认情况下,HTTP 日志记录会缓冲消息,并且仅定期将它们写入磁盘(这更有效,并且还使日志记录不太可能干扰竞争条件等)。但是,如果您看到浏览器崩溃(或挂起),则应在 MOZ_LOG 环境变量中的日志记录模块列表中添加“,sync”。这将导致每个日志消息立即写入(并执行 fflush()),这可能会为我们提供有关崩溃的更多信息。

打开 QUIC 日志记录

这可以通过将 MOZ_LOG 设置为 timestamp,rotate:200,nsHttp:5,neqo_http3::*:5,neqo_transport::*:5 来完成。

仅记录 HTTP 请求和响应标头

有两种方法可以做到这一点

  1. 将上面命令中的 MOZ_LOG=nsHttp:5 替换为 MOZ_LOG=nsHttp:3

  2. Firefox 有一个名为 HTTP Header Live 的便捷扩展程序,您可以使用它来仅捕获 HTTP 请求和响应标头。当您想查看 HTTP 流量时,这是一个有用的工具。

关闭套接字级事务的日志记录

如果您对套接字级日志信息不感兴趣,无论是因为它与您的错误无关,还是因为您正在调试包含大量难以解析的噪声的内容,您都可以这样做。只需从上面的命令中删除文本 nsSocketTransport:5

关闭 DNS 查询日志记录

您可以通过从上面的命令中删除文本 nsHostResolver:5 来关闭主机解析(即 DNS 查询)的日志记录。

启用尝试服务器运行的日志记录

您可以通过 mach try 传递 env 参数来启用 try 上的日志记录。例如

注意

./mach try fuzzy --env "MOZ_LOG=nsHttp:5,SSLTokensCache:5"

如何启用 QUIC 日志记录

启用 QUIC 日志记录 (QLOG) 的步骤如下:

  1. 转到 about:config,搜索 network.http.http3.enable_qlog 并将其设置为 true。

  2. 重启 Firefox。

  3. QLOG 文件将保存在系统临时目录中的 qlog_$PID 目录中。

  4. 要可视化 QLOG 数据,请访问 https://qvis.quictools.info/。您可以将 QLOG 文件上传到那里以查看流的可视化表示。

另请参阅

  • 有类似的选项可用于调试 mailnews 协议。有关 mailnews 故障排除的更多信息,请参阅 此文档

  • 在 Windows 平台上,Firefox nightly 版本内置了 FTP 日志记录功能(不要问为什么只有 Windows 版本有!)。要启用 FTP 日志记录,只需设置 MOZ_LOG=nsFtp:5(在旧版本的 Mozilla 中,您需要使用 nsFTPProtocol 而不是 nsFtp)。

  • 当 Mozilla 内置的日志记录功能不足,并且您需要一个功能齐全的数据包跟踪工具时,两个免费产品是 Wiresharkngrep。它们适用于 Windows 和大多数 Unix 版本(包括 Linux 和 Mac OS X),非常稳定,并提供足够的功能来帮助发现任何 Mozilla 网络问题。