我如何在PHP中保存日志

时间:2010-07-06 14:40:18

标签: php

如何在PHP中保存日志?有什么“魔法”功能在PHP中可用,或任何库?或者我应该每次都要fopen文件并将其转储?我想将我的日志保存在文本文件中。

提前致谢:)

4 个答案:

答案 0 :(得分:10)

如果你不想使用自己的实现,或者只是做fopen-stuff,你就可以使用内置函数error_log('string to log');。这会将所需的字符串写入服务器软件的错误日志中。

答案 1 :(得分:9)

我写了一个简单的类来做这件事。也许你会发现它很有用。

class Log
  {
  public function __construct($log_name,$page_name)
    {
    if(!file_exists('/your/directory/'.$log_name)){ $log_name='a_default_log.log'; }
    $this->log_name=$log_name;

    $this->app_id=uniqid();//give each process a unique ID for differentiation
    $this->page_name=$page_name;

    $this->log_file='/your/directory/'.$this->log_name;
    $this->log=fopen($this->log_file,'a');
    }
  public function log_msg($msg)
    {//the action
    $log_line=join(' : ', array( date(DATE_RFC822), $this->page_name, $this->app_id, $msg ) );
    fwrite($this->log, $log_line."\n");
    }
  function __destruct()
    {//makes sure to close the file and write lines when the process ends.
    $this->log_msg("Closing log");
    fclose($this->log);
    }
  }

 $log=new Log('file_name','my_php_page');
 $log->log_msg('fizzy soda : 45 bubbles remaining per cubic centimeter');

答案 2 :(得分:5)

如果你没有使用其他回复中提到的PHP错误处理函数(http://www.php.net/manual/en/ref.errorfunc.php),这里有一个我以前用过的致命的简单Logger类。标准警告适用,因为我没有在高风险应用程序或交通繁忙的网站上使用它(尽管应该没问题)。

<?
class Logger
{
  private static function addEntry($str)
  {
    $handle = fopen('./services.log', 'a');
    fwrite($handle, sprintf("%s %s\n", date('c'), $str));
    fclose($handle);
  }

  public static function warn($str)
  {
    self::addEntry("WARNING $str");
  }

  public static function info($str)
  {
    self::addEntry("INFO $str");
  }

  public static function debug($str)
  {
    self::addEntry("DEBUG $str");
  }
}
?>

然后你可以像这样使用它:

<?php
require('Logger.php');
Logger::debug('test');
Logger::warn('bwah');
Logger::info('omg');
?>

添加更多函数(如Logger::error())非常简单,存储文件处理程序,这样您就不必每次想要记录某些东西时都重新打开它(即存储{{1私有静态类范围变量中的变量,并且$handle检查它是否在运行时设置并运行addEntry()(如果不是),或者更改格式如何日志记录。

干杯。

答案 3 :(得分:4)

全部取决于您要记录的内容。默认情况下,您将拥有一个error_log,它本质上是一个纯文本文件。如果您正在讨论在代码中记录事件以调试或跟踪脚本中的活动,那么您将需要为此编写自己的日志处理程序,但这非常简单。正如另一张海报所说,您可以使用error_log()函数将内容推送到错误日志中,但这会导致一些非常难以管理的日志文件。