Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'master' of http://github.com/fentie/KLogger into fentie…

…-master
  • Loading branch information...
commit c82723068c4a5d907fca8106738c60d8592c99eb 2 parents 2d4835e + 2cc98b7
Kenneth Katzgrau authored
Showing with 169 additions and 59 deletions.
  1. +169 −59 src/KLogger.php
View
228 src/KLogger.php
@@ -3,17 +3,18 @@
/**
* Finally, a light, permissions-checking logging class.
*
- * Author : Kenny Katzgrau <katzgrau@gmail.com>
- * Date : July 26, 2008
- * Comments : Originally written for use with wpSearch
- * Website : http://codefury.net
- * Version : 1.0
+ * Originally written for use with wpSearch
*
* Usage:
- * $log = new KLogger ( "log.txt" , KLogger::INFO );
- * $log->_logInfo("Returned a million search results"); //Prints to the log file
- * $log->_logFatal("Oh dear."); //Prints to the log file
- * $log->_logDebug("x = 5"); //Prints nothing due to priority setting
+ * $log = new KLogger('/var/log/', KLogger::INFO );
+ * $log->logInfo('Returned a million search results'); //Prints to the log file
+ * $log->logFatal('Oh dear.'); //Prints to the log file
+ * $log->logDebug('x = 5'); //Prints nothing due to current severity threshhold
+ *
+ * @author Kenny Katzgrau <katzgrau@gmail.com>
+ * @since July 26, 2008
+ * @link http://codefury.net
+ * @version 0.1
*/
/**
@@ -22,47 +23,61 @@
class KLogger
{
/**
- * Error logging thresholds, from low to high
+ * Error severity, from low to high. From BSD syslog RFC, secion 4.1.1
+ * @link http://www.faqs.org/rfcs/rfc3164.html
+ */
+ const EMERG = 0; // Emergency: system is unusable
+ const ALERT = 1; // Alert: action must be taken immediately
+ const CRIT = 2; // Critical: critical conditions
+ const ERR = 3; // Error: error conditions
+ const WARN = 4; // Warning: warning conditions
+ const NOTICE = 5; // Notice: normal but significant condition
+ const INFO = 6; // Informational: informational messages
+ const DEBUG = 7; // Debug: debug messages
+
+ //custom logging level
+ /**
+ * Log nothing at all
*/
- const DEBUG = 1; // Most Verbose
- const INFO = 2; // ...
- const WARN = 3; // ...
- const ERROR = 4; // ...
- const FATAL = 5; // Least Verbose
- const OFF = 6; // Nothing at all.
+ const OFF = 8;
+ /**
+ * Alias for CRIT
+ * @deprecated
+ */
+ const FATAL = 2;
/**
* Internal status codes
*/
- const LOG_OPEN = 1;
- const OPEN_FAILED = 2;
- const LOG_CLOSED = 3;
+ const STATUS_LOG_OPEN = 1;
+ const STATUS_OPEN_FAILED = 2;
+ const STATUS_LOG_CLOSED = 3;
/**
* Current status of the log file
* @var integer
*/
- private $_logStatus = self::LOG_CLOSED;
+ private $_logStatus = self::STATUS_LOG_CLOSED;
/**
* Holds messages generated by the class
* @var array
*/
- private $_messageQueue = array();
+ private $_messageQueue = array();
/**
* Path to the log file
* @var string
*/
- private $_logFile = null;
+ private $_logFilePath = null;
/**
* Current minimum logging threshold
* @var integer
*/
- private $_priority = self::INFO;
+ private $_severityThreshold = self::INFO;
/**
* This holds the file handle for this instance's log file
* @var resource
*/
- private $_fileHandle = null;
+ private $_fileHandle = null;
/**
* Standard messages produced by the class. Can be modified for il8n
@@ -76,15 +91,15 @@ class KLogger
);
/**
- * Default priority of log messages, if not specified
+ * Default severity of log messages, if not specified
* @var integer
*/
- private static $_defaultPriority = self::DEBUG;
+ private static $_defaultSeverity = self::DEBUG;
/**
* Valid PHP date() format string for log timestamps
* @var string
*/
- private static $_dateFormat = "Y-m-d G:i:s";
+ private static $_dateFormat = 'Y-m-d G:i:s';
/**
* Octal notation for default permissions of the log file
* @var integer
@@ -101,13 +116,13 @@ class KLogger
* instance.
*
* @param string $logDirectory File path to the logging directory
- * @param integer $priority One of the pre-defined priority constants
+ * @param integer $severity One of the pre-defined severity constants
* @return KLogger
*/
- public static function instance($logDirectory = false, $priority = false)
+ public static function instance($logDirectory = false, $severity = false)
{
- if ($priority === false) {
- $priority = self::$_defaultPriority;
+ if ($severity === false) {
+ $severity = self::$_defaultSeverity;
}
if ($logDirectory === false) {
@@ -122,7 +137,7 @@ public static function instance($logDirectory = false, $priority = false)
return self::$instances[$logDirectory];
}
- self::$instances[$logDirectory] = new self($logDirectory, $priority);
+ self::$instances[$logDirectory] = new self($logDirectory, $severity);
return self::$instances[$logDirectory];
}
@@ -131,39 +146,39 @@ public static function instance($logDirectory = false, $priority = false)
* Class constructor
*
* @param string $logDirectory File path to the logging directory
- * @param integer $priority One of the pre-defined priority constants
+ * @param integer $severity One of the pre-defined severity constants
* @return void
*/
- public function __construct($logDirectory, $priority)
+ public function __construct($logDirectory, $severity)
{
- $logDirectory = rtrim($logDirectory, '/');
+ $logDirectory = rtrim($logDirectory, '\\/');
- if ($priority == self::OFF) {
+ if ($severity === self::OFF) {
return;
}
- $this->_logFile = $logDirectory
+ $this->_logFilePath = $logDirectory
. DIRECTORY_SEPARATOR
. 'log_'
. date('Y-m-d')
. '.txt';
- $this->_priority = $priority;
+ $this->_severityThreshold = $severity;
if (!file_exists($logDirectory)) {
mkdir($logDirectory, self::$_defaultPermissions, true);
}
- if (file_exists($this->_logFile) && !is_writable($this->_logFile)) {
- $this->_logStatus = self::OPEN_FAILED;
+ if (file_exists($this->_logFilePath) && !is_writable($this->_logFilePath)) {
+ $this->_logStatus = self::STATUS_OPEN_FAILED;
$this->_messageQueue[] = $this->_messages['writefail'];
return;
}
- if (($this->_fileHandle = fopen($this->_logFile, "a"))) {
- $this->_logStatus = self::LOG_OPEN;
+ if (($this->_fileHandle = fopen($this->_logFilePath, 'a'))) {
+ $this->_logStatus = self::STATUS_LOG_OPEN;
$this->_messageQueue[] = $this->_messages['opensuccess'];
} else {
- $this->_logStatus = self::OPEN_FAILED;
+ $this->_logStatus = self::STATUS_OPEN_FAILED;
$this->_messageQueue[] = $this->_messages['openfail'];
}
}
@@ -177,9 +192,57 @@ public function __destruct()
fclose($this->_fileHandle);
}
}
+ /**
+ * Writes a $line to the log with a severity level of DEBUG
+ *
+ * @param string $line Information to log
+ * @return void
+ */
+ public function logDebug($line)
+ {
+ $this->log($line, self::DEBUG);
+ }
+
+ /**
+ * Returns (and removes) the last message from the queue.
+ * @return string
+ */
+ public function getMessage()
+ {
+ return array_pop($this->_messageQueue);
+ }
+
+ /**
+ * Returns the entire message queue (leaving it intact)
+ * @return array
+ */
+ public function getMessages()
+ {
+ return $this->_messageQueue;
+ }
+
+ /**
+ * Empties the message queue
+ * @return void
+ */
+ public function clearMessages()
+ {
+ $this->_messageQueue = array();
+ }
/**
- * Writes a $line to the log with a priority level of INFO
+ * Sets the date format used by all instances of KLogger
+ *
+ * @param string $dateFormat Valid format string for date()
+ */
+ public static function setDateFormat($dateFormat)
+ {
+ self::$_dateFormat = $dateFormat;
+ }
+
+ /**
+ * Writes a $line to the log with a severity level of INFO. Any information
+ * can be used here, or it could be used with E_STRICT errors
*
* @param string $line Information to log
* @return void
@@ -190,18 +253,21 @@ public function logInfo($line)
}
/**
- * Writes a $line to the log with a priority level of DEBUG
+ * Writes a $line to the log with a severity level of NOTICE. Generally
+ * corresponds to E_STRICT, E_NOTICE, or E_USER_NOTICE errors
*
* @param string $line Information to log
* @return void
*/
- public function logDebug($line)
+ public function logNotice($line)
{
- $this->log($line, self::DEBUG);
+ $this->log($line, self::NOTICE);
}
/**
- * Writes a $line to the log with a priority level of WARN
+ * Writes a $line to the log with a severity level of WARN. Generally
+ * corresponds to E_WARNING, E_USER_WARNING, E_CORE_WARNING, or
+ * E_COMPILE_WARNING
*
* @param string $line Information to log
* @return void
@@ -212,21 +278,24 @@ public function logWarn($line)
}
/**
- * Writes a $line to the log with a priority level of ERROR
+ * Writes a $line to the log with a severity level of ERR. Most likely used
+ * with E_RECOVERABLE_ERROR
*
* @param string $line Information to log
* @return void
*/
public function logError($line)
{
- $this->log($line, self::ERROR);
+ $this->log($line, self::ERR);
}
/**
- * Writes a $line to the log with a priority level of FATAL
+ * Writes a $line to the log with a severity level of FATAL. Generally
+ * corresponds to E_ERROR, E_USER_ERROR, E_CORE_ERROR, or E_COMPILE_ERROR
*
* @param string $line Information to log
* @return void
+ * @deprecated Use logCrit
*/
public function logFatal($line)
{
@@ -234,15 +303,48 @@ public function logFatal($line)
}
/**
- * Writes a $line to the log with the given priority
+ * Writes a $line to the log with a severity level of ALERT.
+ *
+ * @param string $line Information to log
+ * @return void
+ */
+ public function logAlert($line)
+ {
+ $this->log($line, self::ALERT);
+ }
+
+ /**
+ * Writes a $line to the log with a severity level of CRIT.
+ *
+ * @param string $line Information to log
+ * @return void
+ */
+ public function logCrit($line)
+ {
+ $this->log($line, self::FATAL);
+ }
+
+ /**
+ * Writes a $line to the log with a severity level of EMERG.
+ *
+ * @param string $line Information to log
+ * @return void
+ */
+ public function logEmerg($line)
+ {
+ $this->log($line, self::EMERG);
+ }
+
+ /**
+ * Writes a $line to the log with the given severity
*
* @param string $line Text to add to the log
- * @param integer $priority Priority level of log message (use constants)
+ * @param integer $severity Severity level of log message (use constants)
*/
- public function log($line, $priority)
+ public function log($line, $severity)
{
- if ($this->_priority <= $priority) {
- $status = $this->_getTimeLine($priority);
+ if ($this->_severityThreshold <= $severity) {
+ $status = $this->_getTimeLine($severity);
$this->writeFreeFormLine("$status $line \n");
}
}
@@ -255,8 +357,8 @@ public function log($line, $priority)
*/
public function writeFreeFormLine($line)
{
- if ($this->_logStatus == self::LOG_OPEN
- && $this->_priority != self::OFF) {
+ if ($this->_logStatus == self::STATUS_LOG_OPEN
+ && $this->_severityThreshold != self::OFF) {
if (fwrite($this->_fileHandle, $line) === false) {
$this->_messageQueue[] = $this->_messages['writefail'];
}
@@ -268,13 +370,21 @@ private function _getTimeLine($level)
$time = date(self::$_dateFormat);
switch ($level) {
+ case self::EMERG:
+ return "$time - EMERG -->";
+ case self::ALERT:
+ return "$time - ALERT -->";
+ case self::CRIT:
+ return "$time - CRIT -->";
+ case self::NOTICE:
+ return "$time - NOTICE -->";
case self::INFO:
return "$time - INFO -->";
case self::WARN:
return "$time - WARN -->";
case self::DEBUG:
return "$time - DEBUG -->";
- case self::ERROR:
+ case self::ERR:
return "$time - ERROR -->";
case self::FATAL:
return "$time - FATAL -->";
Please sign in to comment.
Something went wrong with that request. Please try again.