Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中保存日志_Php - Fatal编程技术网

如何在php中保存日志

如何在php中保存日志,php,Php,如何在PHP中保存日志?php中是否有任何“神奇”函数可用于此操作,或者有任何库?还是每次我都必须fopen文件并转储到其中?我想将日志保存在文本文件中 提前感谢:)这取决于您试图记录的内容。默认情况下,您已经有一个错误日志,它本质上是一个纯文本文件。如果要在代码中记录事件以调试或跟踪脚本中的活动,则需要为此编写自己的日志处理程序,但这非常简单。正如另一张海报所说,您可以使用error_log()函数将内容推送到错误日志中,但这会导致一些非常难以管理的日志文件imv。如果您不想使用自己的实现或只

如何在PHP中保存日志?php中是否有任何“神奇”函数可用于此操作,或者有任何库?还是每次我都必须
fopen
文件并转储到其中?我想将日志保存在文本文件中


提前感谢:)

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

如果您不想使用自己的实现或只想做fopen之类的事情,您可以使用内置函数
error_log('string to log')。这会将所需字符串写入服务器软件的错误日志。

我编写了一个简单的类来完成此操作。也许你会发现它很有用

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');

如果您不喜欢使用其他回复中提到的PHP错误处理函数(),那么这里有一个我以前使用过的非常简单的Logger类。标准警告适用,因为我没有在高风险应用程序或流量很大的站点上使用过它(尽管应该可以)


然后你可以这样使用它:

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

添加更多函数(如
Logger::error()
)非常简单,可以存储文件处理程序,这样您就不必在每次需要记录某些内容时都重新打开它(即,将
$handle
变量存储在私有静态类作用域变量中,并具有
addEntry()
检查它是否在运行时设置,并运行
fopen()
如果没有设置),或者更改日志记录的格式


干杯。

谢谢Alex JL,但这对我来说听起来很新鲜
$this->app\u id=self::real\u unique\u string()
。进程id如何对日志有用?当我以后查看日志时,进程id如何帮助我呢?我使用进程id来保持直线。日志每页都是唯一的,所以假设你有5个人同时访问你的页面——日志中只会有大量的行。ID可以帮助您知道哪些行来自同一进程。如果你不需要它,你可以随时取出来。这似乎是PHP的
error\u log($msg,3,$log\u name)的一个极其复杂的版本@R.Bemrose这只是给fopen和fclose带来了一些方便。。。我不认为这会被视为“极其复杂”。好的,谢谢Alex JL。现在我明白了。PHP允许您使用
error\u log
PHP.ini设置配置默认记录器:很高兴您喜欢它,谢谢您的投票。是的,这是一个关于何时使用static的教科书示例。干杯。我只想要打印数据。要买点什么吗?
<?php
require('Logger.php');
Logger::debug('test');
Logger::warn('bwah');
Logger::info('omg');
?>