[翻译] Gecko日志记录

来源:互联网 发布:centos改为中文 编辑:程序博客网 时间:2024/05/16 00:54

原文链接:Gecko_Logging

Gecko核心代码提供了一个基础的C++日志记录框架。所有构建 (Debug、Release)默认开启,线程安全,是NSPR日志记录的首选。

日志记录框架

声明日志模块

LazyLogModule以线程安全的方式推迟创建后台LogModule,并且是声明日志模块的首选方法。

#include "mozilla/Logging.h"static mozilla::LazyLogModule sFooLog("foo");

提供了2个宏和1个枚举类做为基本接口

Mozilla日志记录宏

MOZ_LOG(module, level, message)

输出指定信息,如果模块日志级别允许。

  • module - 要使用的日志模块
  • level - 消息的日志输出级别
  • message - 要输出的printf样式消息。必须括在括号中
MOZ_LOG_TEST(module, level)

检查模块是否开启相应的日志输出级别。

  • module - 要使用的日志模块
  • level - 日志输出级别

Mozilla日志级别

日志级别 数值 作用 Disabled 0 表示日志记录已禁用。这不应该直接在代码中使用。 Error 1 发生错误,通常你会考虑在调试生成中断言。 Warning 2 警告通常表示意外状态。 Info 3 通常指示当前程序状态。 Debug 4 调试消息,对调试有用,但过于冗长,无法正常打开。 Verbose 5 将打印很多有用的调试程序流,并可能会影响性能。

日志记录接口

使用示例

示例代码

#include "mozilla/Logging.h"using mozilla::LogLevel;static mozilla::LazyLogModule sLogger("example_logger");static void DoStuff(){  MOZ_LOG(sLogger, LogLevel::Info, ("Doing stuff."));  int i = 0;  int start = Time::NowMS();  MOZ_LOG(sLogger, LogLevel::Debug, ("Starting loop."));  while (i++ < 10) {    MOZ_LOG(sLogger, LogLevel::Verbose, ("i = %d", i));  }  // Only calculate the elapsed time if the Warning level is enabled.  if (MOZ_LOG_TEST(sLogger, LogLevel::Warning)) {    int elapsed = Time::NowMS() - start;    if (elapsed > 1000) {      MOZ_LOG(sLogger, LogLevel::Warning, ("Loop took %dms!", elapsed));    }  }  if (i != 10) {    MOZ_LOG(sLogger, LogLevel::Error, ("i should be 10!"));  }}

开启日志输出

模块的日志级别通过在启动应用程序之前设置环境变量来控制。

export MOZ_LOG="example_logger:3"

有一些特殊的模块名可以改变日志行为。除日志级别以外,你可以指定一个或多个特殊模块名称。

模块名 append 将新日志附加到现有日志文件。 sync 同步打印每个日志,这对于实时检查行为或在崩溃之前获取日志很有用。 timestamp 插入时间戳开始每个日志行。 rotate:N 这限制了生成的日志文件的大小。仅保存最近的N兆字节的日志数据。我们使用.0,.1,.2,.3扩展名旋转四个日志文件。注意:此选项禁用“附加”和强制的时间戳。


例如,如果要指定“sync”,“timestamp”和“rotate”:

export MOZ_LOG="example_logger:3,timestamp,sync,rotate:10"  

重定向日志到文件

日志输出可以通过环境变量传递其路径来重定向到文件。

默认情况下,日志输出到stderr。

export MOZ_LOG_FILE="log.txt"

上述转储和附加选项仅适用于记录到文件。

E10S注意

当content进程在沙盒中时,它不能写入stderr或任何文件。可能需要将首选项security.sandbox.content.level设置为0才能查看日志。

0 0
原创粉丝点击