为你的 PHP 脚本添加可配置的日志

作者: LJ Staff

本技巧展示了如何向你的 PHP 脚本添加日志,以及如何添加配置,以便你拥有基本的可配置日志。该 PHP 脚本需要两个 PEAR 包:Log 和 Config。 要使用本技巧中显示的代码,你需要安装 PEAR 以及 PHP,并且需要安装 Log 和 Config PEAR 包。 要安装这两个软件包,请键入

      pear install Log Config

配置文件

Config 包支持几种不同的配置源,包括 XML 和标准的 INI 文件格式。 INI 配置文件可以包含一个或多个部分,例如本例中显示的 [Logging] 部分。 这里显示的是一个简单的 INI 文件示例,包含两个用于日志配置的键:log_file 键,其中包含日志文件的完整路径;以及 log_level 键,其中包含将要记录的最低日志级别的字符串表示形式。

      [General]
      # Some configuration values here.

      [Logging]
      log_file=C:\path\to\logs\logfile.txt
      log_level=error

代码

使用这两个包的 PHP 脚本如下所示

      parseConfig('C:\\path\\to\\my.ini', 'IniFile');
      if (isset($configRoot)) {
         $settings = $configRoot->toArray();
      } else {
         throw Exception("Unable to load configuration.");
      }

      $logfile = $settings['root']['Logging']['log_file'];
      $loglevel = $settings['root']['Logging']['log_level'];

      # Create the instance of the logger
      $logger = &Log::factory('file', $logfile, 'MyScript');
      # Transforms the string, 'error' to an integer priority to use for
      # calculating the mask.
      $mask = Log::MAX($logger->stringToPriority($loglevel));
      # Sets the mask for the logger.
      $logger->setMask($mask);

      # Now try logging a bunch of messages to see what happens

      $logger->debug('My debug message');
      $logger->info('My info message');
      $logger->notice('My notice message');
      $logger->warning('My warning message');
      $logger->err('My error message');
      $logger->crit('My critical message');
      $logger->alert('My alert message');
      $logger->emerg('My emergency message');
      ?>

结果

运行该脚本后,你将获得以下输出

      Nov 20 13:34:58 MyScript [error] My error message
      Nov 20 13:34:58 MyScript [critical] My critical message
      Nov 20 13:34:58 MyScript [alert] My alert message
      Nov 20 13:34:58 MyScript [emergency] My emergency message

工作原理

当脚本运行时,Config 类解析 INI 文件并将 sections 和 keys 放入关联数组结构中。 数组元素 root 始终是根元素,然后 section header 嵌套在 root 中,keys(log_file 和 log_level)与 section header 关联。 要访问 log_file 值,脚本使用

      $settings['root']['Logging']['log_file'].

Log::MAX() 方法告诉记录器设置一个掩码,该掩码将屏蔽从调试到最大错误的全部内容。 这将屏蔽任何在优先级上被认为不如错误重要的内容,阻止那些不太重要的消息被写入日志。

为你的 PHP 脚本添加可配置的日志级别可以很好地消除“滚动盲点”,当有太多的日志消息需要筛选时,就会发生这种情况。

有关这些 PEAR 包及更多内容的精彩参考,请获取 Nathan A. Good 和 Allan Kent 的 Foundations of PEAR: Rapid PHP Development。 由 APress 出版。 http://www.apress.com/book/bookDisplay.html?bID=10181。经许可摘录,由 Apress 出版 (ISBN 1-59059-739-7)。

关于作者

Nathan A. Good 住在明尼苏达州双城地区。 他是一名软件开发人员、系统管理员和作者。 他撰写或与他人合著了多本关于开源技术的书籍和文章。

Allan Kent 是一个土生土长的南非人,至今仍然在开普敦生活和工作。 他从事各种语言和不同平台的编程工作已有 20 多年。 他目前是 Saatchi & Saatchi 开普敦的技术主管。
__________________________

加载 Disqus 评论