<?php
namespace extend;
use extend\log\LogLevel;
/**
* Class ILog
* @package extend
* User Jiang Haiqiang
*/
abstract class ILog
{
/**
* @var IFormatter
* @author Jiang Haiqiang
* @email jhq0113@163.com
*/
public $format = [];
/**
* 系统不可用
*
* @param string $message
* @param array $context
* @return null
*/
public function emergency($message, array $context = array())
{
return $this->log(LogLevel::EMERGENCY,$message,$context);
}
/**
* **必须** 立刻采取行动
*
* 例如:在整个网站都垮掉了、数据库不可用了或者其他的情况下, **应该** 发送一条警报短信把你叫醒。
*
* @param string $message
* @param array $context
* @return null
*/
public function alert($message, array $context = array())
{
return $this->log(LogLevel::ALERT,$message,$context);
}
/**
* 紧急情况
*
* 例如:程序组件不可用或者出现非预期的异常。
*
* @param string $message
* @param array $context
* @return null
*/
public function critical($message, array $context = array())
{
return $this->log(LogLevel::CRITICAL,$message,$context);
}
/**
* 运行时出现的错误,不需要立刻采取行动,但必须记录下来以备检测。
*
* @param string $message
* @param array $context
* @return null
*/
public function error($message, array $context = array())
{
return $this->log(LogLevel::ERROR,$message,$context);
}
/**
* 出现非错误性的异常。
*
* 例如:使用了被弃用的API、错误地使用了API或者非预想的不必要错误。
*
* @param string $message
* @param array $context
* @return null
*/
public function warning($message, array $context = array())
{
return $this->log(LogLevel::WARNING,$message,$context);
}
/**
* 一般性重要的事件。
*
* @param string $message
* @param array $context
* @return null
*/
public function notice($message, array $context = array())
{
return $this->log(LogLevel::NOTICE,$message,$context);
}
/**
* 重要事件
*
* 例如:用户登录和SQL记录。
*
* @param string $message
* @param array $context
* @return null
*/
public function info($message, array $context = array())
{
return $this->log(LogLevel::INFO,$message,$context);
}
/**
* debug 详情
*
* @param string $message
* @param array $context
* @return null
*/
public function debug($message, array $context = array())
{
return $this->log(LogLevel::DEBUG,$message,$context);
}
/**
* 任意等级的日志记录
*
* @param mixed $level
* @param string $message
* @param array $context
* @return null
*/
abstract public function log($level, $message, array $context = array());
}
?>
<?php
namespace extend\log;
use extend\Di;
use extend\formatter\Json;
use extend\helpers\HttpHelper;
use extend\helpers\StringHelper;
use extend\ILog;
/**
* Class File
* @package extend\log
* User Jiang Haiqiang
*/
class File extends ILog
{
/**
* @var string
* @author Jiang Haiqiang
* @email jhq0113@163.com
*/
public $fileName;
/**
* @var int
* @author Jiang Haiqiang
* @email jhq0113@163.com
*/
public $mode=0755;
/**
* @param mixed $level
* @param string $message
* @param array $context
* @return null|void
* @author Jiang Haiqiang
* @email jhq0113@163.com
*/
public function log($level, $message, array $context = array())
{
// TODO: Implement log() method.
$dir = dirname($this->fileName);
if(!is_dir($dir)) {
mkdir($dir,$this->mode,true);
}
$message = StringHelper::interpolate($message,$context);
$data = [
'message' => $message,
'level' => $level,
'datetime' => date('Y-m-d H:i:s'),
'clientIp' => HttpHelper::getClientIp()
];
$file = @fopen($this->fileName,'a');
if($file) {
$this->format = Di::insure($this->format,Json::class);
@fwrite($file,$this->format->convert($data).PHP_EOL);
@chmod($this->fileName,$this->mode);
@fclose($file);
}
}
}
?>