То, как делают я сохраняю, входит в систему PHP? Действительно ли там какая-либо "волшебная" функция доступна в php для того, чтобы сделать так, или какая-либо библиотека? Или если я имею к fopen
файл каждый раз и дамп в нем? Я хочу сохранить свои журналы в текстовом файле.
Заранее спасибо :)
Я написал простой класс для этого. Возможно, вы найдете его полезным.
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');
Если вы не хотите использовать собственную реализацию или просто делать fopen-stuff, вы можете использовать встроенную функцию error_log('string to log');
. Это запишет нужную строку в журнал ошибок вашего серверного программного обеспечения.
Если вам не нравятся функции обработки ошибок 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 ()
), сохранить обработчик файла, чтобы вам не приходилось повторять- открывая его каждый раз, когда вы хотите что-то записать (например, сохраните переменную $ handle
в частной переменной области статического класса, и пусть addEntry ()
проверяет, установлен ли он всякий раз он запускается и запускает fopen ()
, если это не так), или изменяет формат ведения журнала.
Ура.
Все зависит от того, что вы пытаетесь записать в журнал. По умолчанию у вас уже есть error_log, который, по сути, является обычным текстовым файлом. Если вы говорите о регистрации событий в коде для отладки или отслеживания активности в скрипте, то вам придется написать собственный обработчик журнала, но это очень просто. Как сказал другой автор, вы можете отправлять содержимое в журнал ошибок с помощью функции error_log(), но это приведет к появлению неуправляемых файлов журнала imv.