<?php
|
/**
|
* PhalApi_Logger_File 文件日记纪录类
|
*
|
* - 将日记写入文件,文件目录可以自定义
|
*
|
* <br>使用示例:<br>
|
```
|
* //目录为./Runtime,且保存全部类型的日记
|
* $logger = new PhalApi_Logger_File('./Runtime',
|
* PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR);
|
*
|
* //日记会保存在在./Runtime/debug_log/目录下
|
* $logger->debug('this is bebug test');
|
```
|
*
|
* @package PhalApi\Logger
|
* @license http://www.phalapi.net/license GPL 协议
|
* @link http://www.phalapi.net/
|
* @author dogstar <chanzonghuang@gmail.com> 2014-10-02
|
*/
|
|
class PhalApi_Logger_File extends PhalApi_Logger {
|
|
/** 外部传参 **/
|
protected $logFolder;
|
protected $dateFormat;
|
|
/** 内部状态 **/
|
protected $fileDate;
|
protected $logFile;
|
|
public function __construct($logFolder, $level, $dateFormat = 'Y-m-d H:i:s') {
|
$this->logFolder = $logFolder;
|
$this->dateFormat = $dateFormat;
|
|
parent::__construct($level);
|
|
$this->init();
|
}
|
|
protected function init() {
|
// 跨天时新建日记文件
|
$curFileDate = date('Ymd', time());
|
if ($this->fileDate == $curFileDate) {
|
return;
|
}
|
$this->fileDate = $curFileDate;
|
|
// 每月一个目录
|
$folder = $this->logFolder
|
. DIRECTORY_SEPARATOR . 'log'
|
. DIRECTORY_SEPARATOR . substr($this->fileDate, 0, -2);
|
if (!file_exists($folder)) {
|
mkdir($folder . '/', 0777, TRUE);
|
}
|
|
// 每天一个文件
|
$this->logFile = $folder
|
. DIRECTORY_SEPARATOR . $this->fileDate . '.log';
|
if (!file_exists($this->logFile)) {
|
// 当没有权限时,touch会抛出(Permission denied)异常
|
@touch($this->logFile);
|
// touch失败时,chmod会抛出(No such file or directory)异常
|
if (file_exists($this->logFile)) {
|
chmod($this->logFile, 0777);
|
}
|
}
|
}
|
|
public function log($type, $msg, $data) {
|
$this->init();
|
|
$msgArr = array();
|
$msgArr[] = date($this->dateFormat, time());
|
$msgArr[] = strtoupper($type);
|
$msgArr[] = str_replace(PHP_EOL, '\n', $msg);
|
if ($data !== NULL) {
|
$msgArr[] = is_array($data) ? json_encode($data) : $data;
|
}
|
|
$content = implode('|', $msgArr) . PHP_EOL;
|
|
file_put_contents($this->logFile, $content, FILE_APPEND);
|
}
|
}
|