Created
October 25, 2017 23:19
-
-
Save louisl/7c9cfaf7e7f962e2483cc4a4e44c2768 to your computer and use it in GitHub Desktop.
CodeIgniter 3 Log extension
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* CodeIgniter core extension | |
* | |
* @package CodeIgniter | |
* @author Louis Linehan <[email protected]> | |
* @copyright 2017 Louis Linehan | |
* @license https://opensource.org/licenses/MIT MIT | |
* @filesource | |
*/ | |
defined('BASEPATH') OR exit('No direct script access allowed'); | |
/** | |
* MY Log | |
* | |
* This adds HTTP_REFERER, REQUEST_URI, REMOTE_ADDR to the end of the log message. | |
* | |
* @package CodeIgniter\application\core | |
* @author Louis Linehan <[email protected]> | |
*/ | |
class MY_Log extends CI_Log { | |
/** | |
* Class constructor | |
* | |
* @return void | |
*/ | |
public function __construct() | |
{ | |
parent::__construct(); | |
} | |
/** | |
* Write Log File | |
* | |
* Generally this function will be called using the global log_message() function | |
* | |
* @param string $level The error level: 'error', 'debug', 'info' or 'all' | |
* @param string $msg The error message | |
* | |
* @return boolean | |
*/ | |
public function write_log($level, $msg) | |
{ | |
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; | |
} | |
$filepath = $this->_log_path . 'log-' . date('Y-m-d') . '.' . $this->_file_ext; | |
$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; | |
} | |
flock($fp, LOCK_EX); | |
// 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); | |
} | |
// Changed this to also output the referer and url if found. | |
$referer = ! empty($_SERVER['HTTP_REFERER']) ? ' HTTP_REFERER "' . $_SERVER['HTTP_REFERER'] . '"' : ''; | |
$request_uri = ! empty($_SERVER['REQUEST_URI']) ? ' REQUEST_URI "' . $_SERVER['REQUEST_URI'] . '"' : ''; | |
$ip_address = ! empty($_SERVER['REMOTE_ADDR']) ? ' REMOTE_ADDR "' . $_SERVER['REMOTE_ADDR'] . '"' : ''; | |
$message .= $this->_format_line($level, $date, $msg . $request_uri . $referer . $ip_address); | |
for ($written = 0, $length = self::strlen($message); $written < $length; $written += $result) | |
{ | |
if (($result = fwrite($fp, self::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); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment