CodeIgniter Error Log Info + Ошибки - PullRequest
       0

CodeIgniter Error Log Info + Ошибки

6 голосов
/ 27 декабря 2010

Есть ли способ сохранить в журнале информацию + ошибки без отладки?
Как получается уровень отладки с информацией?
Если я хочу зарегистрировать информацию "Идентификатор учетной записи 4345 был удален администратором", почемуМне нужно увидеть все это:

DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Config Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Hooks Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 URI Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Router Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Output Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Input Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Global POST and COOKIE data sanitized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Language Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Loader Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Config file loaded: config/safe_charge.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Config file loaded: config/web_fx.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Helper loaded: loadutils_helper
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Helper loaded: objectsutils_helper
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Helper loaded: logutils_helper
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Helper loaded: password_helper
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Database Driver Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 cURL Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Language Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Config Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Account MX_Controller Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 File loaded: ./modules/accounts/models/pending_account_model.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Model Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 File loaded: ./modules/accounts/models/proccess_accounts_model.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Model Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 File loaded: ./modules/accounts/models/web_fx_model.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Model Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 File loaded: ./modules/accounts/models/trader_account_type_spreads.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Model Class Initialized
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 File loaded: ./modules/accounts/models/trader_accounts.php
DEBUG - 2010-12-27 08:39:13 --> 192.168.200.32 Model Class Initialized

Спасибо

Ответы [ 5 ]

3 голосов
/ 16 июля 2016

Вы не столкнетесь с проблемой в codeigniter 2

$config['log_threshold'] = array(1, 3);

в config / config.php

и

log_message('info', 'The purpose of some variable is to provide some value.');

, где вы хотите что-то зарегистрировать, вы напечатаете только это сообщение в файл журнала, без лишнего кода отладки.

НО

В codeIgniter 3 многие файлы ядра системы имеют

log_message ('info', ******************);

Как

log_message('info', 'Config Class Initialized');
log_message('info', 'Controller Class Initialized');
log_message('info', 'Hooks Class Initialized');
............

Вот почему, когда

$config['log_threshold'] = array(1, 3);

или

$config['log_threshold'] = array(3);

или

$config['log_threshold'] = 3;

тогда все нежелательные сообщения журнала появляются в файле журнала.

Итак, один из способов решить эту проблему - расширить все основные файлы и изменить

log_message('info'

до

log_message('debug' 

или создание нового порога, например

в config / config.php

$config['log_threshold'] = array(1, 5);

в ядре / MY_Log.php

protected $_levels = array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4', 'USER_INFO' => '5');

Полный файл core / MY_Log.php

class MY_Log extends CI_Log
{

    protected $_log_path;
    protected $_threshold = 1;
    protected $_date_fmt = 'Y-m-d H:i:s';
    protected $_enabled = TRUE;
    protected $_levels = array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4', 'USER_INFO' => '5');

    /**
     * Constructor
     */
    public function __construct()
    {
        parent::__construct();

        $config =& get_config();

        $this->_log_path = ($config['log_path'] !== '') ? $config['log_path'] : APPPATH.'logs/';
        $this->_file_ext = (isset($config['log_file_extension']) && $config['log_file_extension'] !== '')
            ? ltrim($config['log_file_extension'], '.') : 'log';

        file_exists($this->_log_path) OR mkdir($this->_log_path, 0755, TRUE);

        if ( ! is_dir($this->_log_path) OR ! is_really_writable($this->_log_path))
        {
            $this->_enabled = FALSE;
        }

        if (is_numeric($config['log_threshold']))
        {
            $this->_threshold = (int) $config['log_threshold'];
        }
        elseif (is_array($config['log_threshold']))
        {
            $this->_threshold = 0;
            $this->_threshold_array = array_flip($config['log_threshold']);
        }

        if ( ! empty($config['log_date_format']))
        {
            $this->_date_fmt = $config['log_date_format'];
        }

        if ( ! empty($config['log_file_permissions']) && is_int($config['log_file_permissions']))
        {
            $this->_file_permissions = $config['log_file_permissions'];
        }
    }

    // --------------------------------------------------------------------

    /**
     * Write Log File
     *
     * Generally this function will be called using the global log_message() function
     *
     * @param string the error level
     * @param string the error message
     * @param bool whether the error is a native PHP error
     * @return bool
     */
    public function write_log($level = 'error', $msg, $php_error = FALSE)
    {

        if ($this->_enabled === FALSE)
        {
            return FALSE;
        }

        $level = strtoupper($level);

        if (( ! isset($this->_levels[$level]) OR ($this->_levels[$level] > $this->_threshold))
            && ! isset($this->_threshold_array[$this->_levels[$level]]))
        {
            return FALSE;
        }

        if($level == 'USER_INFO')
        {
            $filepath = $this->_log_path . 'info-log-' . date('Y-m-d') . '.php';
        }
        else
        {
            $filepath = $this->_log_path . 'log-' . date('Y-m-d') . '.php';
        }

        $message = '';

        if ( ! file_exists($filepath))
        {
            $newfile = TRUE;
            // Only add protection to php files
            if ($this->_file_ext === 'php')
            {
                $message .= "<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>\n\n";
            }
        }

        if ( ! $fp = @fopen($filepath, 'ab'))
        {
            return FALSE;
        }

        // Instantiating DateTime with microseconds appended to initial date is needed for proper support of this format
        if (strpos($this->_date_fmt, 'u') !== FALSE)
        {
            $microtime_full = microtime(TRUE);
            $microtime_short = sprintf("%06d", ($microtime_full - floor($microtime_full)) * 1000000);
            $date = new DateTime(date('Y-m-d H:i:s.'.$microtime_short, $microtime_full));
            $date = $date->format($this->_date_fmt);
        }
        else
        {
            $date = date($this->_date_fmt);
        }

        $message .= $level.' - '.$date.' --> '.$msg."\n";

        flock($fp, LOCK_EX);

        for ($written = 0, $length = strlen($message); $written < $length; $written += $result)
        {
            if (($result = fwrite($fp, substr($message, $written))) === FALSE)
            {
                break;
            }
        }

        flock($fp, LOCK_UN);
        fclose($fp);

        if (isset($newfile) && $newfile === TRUE)
        {
            chmod($filepath, $this->_file_permissions);
        }

        return is_int($result);
    }

}
3 голосов
/ 24 июля 2013

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

измените функцию write_log в Log.php следующим образом:

  public function write_log($level = 'error', $msg, $php_error = FALSE)
    {
        if ($this->_enabled === FALSE)
        {
            return FALSE;
        }

        $level = strtoupper($level);

        if ( ! isset($this->_levels[$level]))
        {
            return FALSE;
        }
        if (($this->_levels[$level] > $this->_threshold) OR (is_array($this->_threshold) && !in_array($this->_levels[$level], $this->_threshold)))
        {
            return FALSE;
        }



        $filepath = $this->_log_path.'log-'.date('Y-m-d').'.php';
        $message  = '';

        if ( ! file_exists($filepath))
        {
            $message .= "<"."?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
        }

        if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
        {
            return FALSE;
        }

        $message .= $level.' '.(($level == 'INFO') ? ' -' : '-').' '.date($this->_date_fmt). ' --> '.$msg."\n";

        flock($fp, LOCK_EX);
        fwrite($fp, $message);
        flock($fp, LOCK_UN);
        fclose($fp);

        @chmod($filepath, FILE_WRITE_MODE);
        return TRUE;
    }

Затем вы можете указать массив в вашем конфигурационном файле:

$config['log_threshold'] = array(3, 1);

И тогда ваш лог-файл будет выглядеть примерно так:

ERROR - 2013-07-24 13:50:04 --> Severity: Warning  --> 
INFO  - 2013-07-24 13:50:04 --> The purpose of some variable is to provide some value.
ERROR - 2013-07-24 13:50:06 --> 404 Page Not Found --> 404.shtml
3 голосов
/ 11 февраля 2014

quickfix проверено на codeigniter 2.1.4

копия

/ система / libary / log.php

до

/ приложение / libary / log.php

добавить следующие строки перед $ filepath (строка 86)

// remove all DEBUG messages
if ( $this->_levels[$level] == 2 )
{
return FALSE;
}
1 голос
/ 20 февраля 2014

лучший способ, с помощью которого я буду использовать sugeest, - использовать файл, предложенный codeigniter.У меня была такая же проблема, и это ее обмануло.проверить это здесь https://github.com/EllisLab/CodeIgniter/wiki/Custom-Logging-Threshold

1 голос
/ 27 декабря 2010

Из Документы CodeIgniter :

log_message('info', 'The purpose of some variable is to provide some value.');

Информационные сообщения. Это сообщения с самым низким приоритетом, просто дающие информацию о каком-либо процессе. CodeIgniter не генерирует никаких информационных сообщений, но вы можете захотеть использовать их в своем приложении.

Примечание. Чтобы файл журнала действительно записывался, папка «logs» должна быть доступна для записи. Кроме того, вы должны установить «порог» для регистрации. Например, вы можете захотеть регистрировать только сообщения об ошибках, а не два других типа. Если вы установите его на ноль, регистрация будет отключена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...