parent
a7159502bd
commit
e9d51cd5e0
@ -0,0 +1,166 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* Logger |
||||||
|
* |
||||||
|
* @since Version 1.0 |
||||||
|
*/ |
||||||
|
class Harmonious_Json_Logger { |
||||||
|
|
||||||
|
/** |
||||||
|
* @var array Log levels |
||||||
|
*/ |
||||||
|
protected $levels = array( |
||||||
|
0 => 'FATAL', |
||||||
|
1 => 'ERROR', |
||||||
|
2 => 'WARN', |
||||||
|
3 => 'INFO', |
||||||
|
4 => 'DEBUG' |
||||||
|
); |
||||||
|
|
||||||
|
/** |
||||||
|
* @var string Absolute path to log directory with trailing slash |
||||||
|
*/ |
||||||
|
protected $directory; |
||||||
|
|
||||||
|
/** |
||||||
|
* Constructor |
||||||
|
* @param string $directory Absolute or relative path to log directory |
||||||
|
* @param int $level The maximum log level reported by this Logger |
||||||
|
*/ |
||||||
|
public function __construct( $directory, $level = 4 ) { |
||||||
|
$this->setDirectory($directory); |
||||||
|
$this->setLevel($level); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Set log directory |
||||||
|
* @param string $directory Absolute or relative path to log directory |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function setDirectory( $directory ) { |
||||||
|
$realPath = realpath($directory); |
||||||
|
if ( $realPath ) { |
||||||
|
$this->directory = rtrim($realPath, '/') . '/'; |
||||||
|
} else { |
||||||
|
$this->directory = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get log directory |
||||||
|
* @return string|false Absolute path to log directory with trailing slash |
||||||
|
*/ |
||||||
|
public function getDirectory() { |
||||||
|
return $this->directory; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Set log level |
||||||
|
* @param int The maximum log level reported by this Logger |
||||||
|
* @return void |
||||||
|
* @throws InvalidArgumentException If level specified is not 0, 1, 2, 3, 4 |
||||||
|
*/ |
||||||
|
public function setLevel( $level ) { |
||||||
|
$theLevel = (int)$level; |
||||||
|
if ( $theLevel >= 0 && $theLevel <= 4 ) { |
||||||
|
$this->level = $theLevel; |
||||||
|
} else { |
||||||
|
throw new InvalidArgumentException('Invalid Log Level. Must be one of: 0, 1, 2, 3, 4.'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get log level |
||||||
|
* @return int |
||||||
|
*/ |
||||||
|
public function getLevel() { |
||||||
|
return $this->level; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log debug data |
||||||
|
* @param mixed $data |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function debug( $data ) { |
||||||
|
$this->log($data, 4); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log info data |
||||||
|
* @param mixed $data |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function info( $data ) { |
||||||
|
$this->log($data, 3); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log warn data |
||||||
|
* @param mixed $data |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function warn( $data ) { |
||||||
|
$this->log($data, 2); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log error data |
||||||
|
* @param mixed $data |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function error( $data ) { |
||||||
|
$this->log($data, 1); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log fatal data |
||||||
|
* @param mixed $data |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function fatal( $data ) { |
||||||
|
$this->log($data, 0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get absolute path to current daily log file |
||||||
|
* @return string |
||||||
|
*/ |
||||||
|
public function getFile() { |
||||||
|
return $this->getDirectory() . strftime('%Y-%m-%d') . '.log'; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Log data to file |
||||||
|
* @param mixed $data |
||||||
|
* @param int $level |
||||||
|
* @return void |
||||||
|
* @throws RuntimeException If log directory not found or not writable |
||||||
|
*/ |
||||||
|
protected function log( $data, $level ) { |
||||||
|
$dir = $this->getDirectory(); |
||||||
|
if ( $dir == false || !is_dir($dir) ) { |
||||||
|
throw new RuntimeException("Log directory '$dir' invalid."); |
||||||
|
} |
||||||
|
if ( !is_writable($dir) ) { |
||||||
|
throw new RuntimeException("Log directory '$dir' not writable."); |
||||||
|
} |
||||||
|
|
||||||
|
$data['error_level_int'] = $level; |
||||||
|
$data['error_level'] = $this->levels[$level]; |
||||||
|
|
||||||
|
if ( $level <= $this->getLevel() ) { |
||||||
|
$this->write(json_encode($data)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Persist data to log |
||||||
|
* @param string Log message |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
protected function write( $data ) { |
||||||
|
@file_put_contents($this->getFile(), $data, FILE_APPEND | LOCK_EX); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue