如何在PHP中保存日志?有什么“魔法”功能在PHP中可用,或任何库?或者我应该每次都要fopen
文件并将其转储?我想将我的日志保存在文本文件中。
提前致谢:)
答案 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()函数将内容推送到错误日志中,但这会导致一些非常难以管理的日志文件。