NSPR 日志记录

本章介绍用于执行日志记录的全局函数。NSPR 提供了一组日志记录函数,这些函数将 printf() 样式字符串有条件地写入控制台或日志文件。NSPR 本身也使用此功能进行自身开发调试。

您可以按模块或级别选择要记录的事件。模块是用户定义的一类日志事件。级别是一个数值,指示要记录的事件的严重程度。您可以组合模块和级别条件以获得高度选择性的日志记录。

NSPR 还提供“断言”样式的宏和函数来帮助进行应用程序调试。

条件编译和执行

NSPR 的日志记录功能在使用它的应用程序中被有条件地编译和启用。这些控制是平台相关的。Win16 平台未编译日志记录功能。日志记录被编译到 NSPR 调试版本中;日志记录未编译到 NSPR 优化版本中。编译时 #defineDEBUGFORCE_PR_LOG 为应用程序程序启用 NSPR 日志记录。

要在应用程序中启用 NSPR 日志记录和/或调试辅助功能,请使用 NSPR 调试版本的头文件和运行时进行编译。在构建应用程序时设置编译时定义之一。

NSPR 日志记录的运行时控制使用两个环境变量。这些变量控制记录哪些模块和级别以及日志文件的名称。默认情况下,在运行时未启用任何日志记录。

日志类型和变量

API 中公开了两种支持 NSPR 日志记录的类型

两个环境变量控制日志记录在运行时的行为

日志记录函数和宏

用于日志记录的函数和宏为

  • PR_NewLogModule

  • PR_SetLogFile

  • PR_SetLogBuffering

  • PR_LogPrint

  • PR_LogFlush

  • PR_LOG_TEST

  • PR_LOG

  • PR_ASSERT

  • PR_STATIC_ASSERT(NSPR 4.6.6XXX 中的新增功能,尚未发布;数字是逻辑猜测)

  • PR_NOT_REACHED

注意

以上文档尚未移植到 MDN,请参见 http://www-archive.mozilla.org/projects/nspr/reference/html/prlog.html#25338

使用示例

以下代码片段演示了日志记录和调试辅助功能的使用。

  • 使用定义 DEBUG 编译程序。

  • 在运行编译后的程序之前,将环境变量 NSPR_LOG_MODULES 设置为 userStuff:5

static void UserLogStuff( void )
{
    PRLogModuleInfo *myLM;
    PRIntn i;

    PR_STATIC_ASSERT(5 > 4); /* NSPR 4.6.6 or newer */

    myLM = PR_NewLogModule( "userStuff" );
    PR_ASSERT( myLM );

    PR_LOG( myLM, PR_LOG_NOTICE, ("Log a Notice %d\n", 999 ));
    for (i = 0; i < 10 ; i++ )
    {
        PR_LOG( myLM, PR_LOG_DEBUG, ("Log Debug number: %d\n", i));
        PR_Sleep( 500 );
    }
    PR_LOG( myLM, PR_LOG_NOTICE, "That's all folks\n");

} /* end UserLogStuff() */