blob: 99ed126f4c40170b26058be335f111077a46fde8 [file] [log] [blame]
Derek Allard2067d1a2008-11-13 22:59:24 +00001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2/**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 4.3.2 or newer
6 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
Derek Jones7f3719f2010-01-05 13:35:37 +00009 * @copyright Copyright (c) 2008 - 2010, EllisLab, Inc.
Derek Allard2067d1a2008-11-13 22:59:24 +000010 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Logging Class
20 *
21 * @package CodeIgniter
22 * @subpackage Libraries
23 * @category Logging
24 * @author ExpressionEngine Dev Team
25 * @link http://codeigniter.com/user_guide/general/errors.html
26 */
27class CI_Log {
28
29 var $log_path;
30 var $_threshold = 1;
31 var $_date_fmt = 'Y-m-d H:i:s';
32 var $_enabled = TRUE;
33 var $_levels = array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4');
34
35 /**
36 * Constructor
37 *
38 * @access public
39 */
40 function CI_Log()
41 {
42 $config =& get_config();
Barry Mienydd671972010-10-04 16:33:58 +020043
Derek Allard2067d1a2008-11-13 22:59:24 +000044 $this->log_path = ($config['log_path'] != '') ? $config['log_path'] : BASEPATH.'logs/';
Barry Mienydd671972010-10-04 16:33:58 +020045
Derek Allard2067d1a2008-11-13 22:59:24 +000046 if ( ! is_dir($this->log_path) OR ! is_really_writable($this->log_path))
47 {
48 $this->_enabled = FALSE;
49 }
Barry Mienydd671972010-10-04 16:33:58 +020050
Derek Allard2067d1a2008-11-13 22:59:24 +000051 if (is_numeric($config['log_threshold']))
52 {
53 $this->_threshold = $config['log_threshold'];
54 }
Barry Mienydd671972010-10-04 16:33:58 +020055
Derek Allard2067d1a2008-11-13 22:59:24 +000056 if ($config['log_date_format'] != '')
57 {
58 $this->_date_fmt = $config['log_date_format'];
59 }
60 }
Barry Mienydd671972010-10-04 16:33:58 +020061
Derek Allard2067d1a2008-11-13 22:59:24 +000062 // --------------------------------------------------------------------
Barry Mienydd671972010-10-04 16:33:58 +020063
Derek Allard2067d1a2008-11-13 22:59:24 +000064 /**
65 * Write Log File
66 *
67 * Generally this function will be called using the global log_message() function
68 *
69 * @access public
70 * @param string the error level
71 * @param string the error message
72 * @param bool whether the error is a native PHP error
73 * @return bool
Barry Mienydd671972010-10-04 16:33:58 +020074 */
Derek Allard2067d1a2008-11-13 22:59:24 +000075 function write_log($level = 'error', $msg, $php_error = FALSE)
Barry Mienydd671972010-10-04 16:33:58 +020076 {
Derek Allard2067d1a2008-11-13 22:59:24 +000077 if ($this->_enabled === FALSE)
78 {
79 return FALSE;
80 }
Barry Mienydd671972010-10-04 16:33:58 +020081
Derek Allard2067d1a2008-11-13 22:59:24 +000082 $level = strtoupper($level);
Barry Mienydd671972010-10-04 16:33:58 +020083
Derek Allard2067d1a2008-11-13 22:59:24 +000084 if ( ! isset($this->_levels[$level]) OR ($this->_levels[$level] > $this->_threshold))
85 {
86 return FALSE;
87 }
Barry Mienydd671972010-10-04 16:33:58 +020088
Derek Allard2067d1a2008-11-13 22:59:24 +000089 $filepath = $this->log_path.'log-'.date('Y-m-d').EXT;
90 $message = '';
Barry Mienydd671972010-10-04 16:33:58 +020091
Derek Allard2067d1a2008-11-13 22:59:24 +000092 if ( ! file_exists($filepath))
93 {
94 $message .= "<"."?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
95 }
Barry Mienydd671972010-10-04 16:33:58 +020096
Derek Allard2067d1a2008-11-13 22:59:24 +000097 if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
98 {
99 return FALSE;
100 }
101
102 $message .= $level.' '.(($level == 'INFO') ? ' -' : '-').' '.date($this->_date_fmt). ' --> '.$msg."\n";
Barry Mienydd671972010-10-04 16:33:58 +0200103
104 flock($fp, LOCK_EX);
Derek Allard2067d1a2008-11-13 22:59:24 +0000105 fwrite($fp, $message);
106 flock($fp, LOCK_UN);
107 fclose($fp);
Barry Mienydd671972010-10-04 16:33:58 +0200108
109 @chmod($filepath, FILE_WRITE_MODE);
Derek Allard2067d1a2008-11-13 22:59:24 +0000110 return TRUE;
111 }
112
113}
114// END Log Class
115
116/* End of file Log.php */
Derek Jonesa3ffbbb2008-05-11 18:18:29 +0000117/* Location: ./system/libraries/Log.php */