使用示例:
``` * //目录为./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 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); } }