То, как делают я сохраняю, входит в систему php

То, как делают я сохраняю, входит в систему PHP? Действительно ли там какая-либо "волшебная" функция доступна в php для того, чтобы сделать так, или какая-либо библиотека? Или если я имею к fopen файл каждый раз и дамп в нем? Я хочу сохранить свои журналы в текстовом файле.

Заранее спасибо :)

5
задан TCM 6 July 2010 в 14:40
поделиться

4 ответа

Я написал простой класс для этого. Возможно, вы найдете его полезным.

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');
9
ответ дан 12 December 2019 в 12:18
поделиться

Если вы не хотите использовать собственную реализацию или просто делать fopen-stuff, вы можете использовать встроенную функцию error_log('string to log'); . Это запишет нужную строку в журнал ошибок вашего серверного программного обеспечения.

10
ответ дан 12 December 2019 в 12:18
поделиться

Если вам не нравятся функции обработки ошибок 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 () , если это не так), или изменяет формат ведения журнала.

Ура.

5
ответ дан 12 December 2019 в 12:18
поделиться

Все зависит от того, что вы пытаетесь записать в журнал. По умолчанию у вас уже есть error_log, который, по сути, является обычным текстовым файлом. Если вы говорите о регистрации событий в коде для отладки или отслеживания активности в скрипте, то вам придется написать собственный обработчик журнала, но это очень просто. Как сказал другой автор, вы можете отправлять содержимое в журнал ошибок с помощью функции error_log(), но это приведет к появлению неуправляемых файлов журнала imv.

4
ответ дан 12 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: