<?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); 
 | 
    } 
 | 
} 
 |