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