| <?php | 
| namespace Log4Me; | 
| #´´½¨ÈÕÆÚ£º2012-4-13 ÏÂÎç4:10:48 | 
| #×÷Õߣºxcc | 
| #ÅäÖÃÎļþ¶ÁÈ¡Æ÷ | 
| #date_default_timezone_set('PRC'); | 
|   | 
| const LOG_LEVEL_DEBUG = 0;    | 
| const LOG_LEVEL_INFO = 1; | 
| const LOG_LEVEL_WARN = 2; | 
| const LOG_LEVEL_ERROR = 3; | 
| const LOG_LEVEL_FATAL = 4; | 
|   | 
|   | 
| const WRITE_MODE_PERDAY = 0;  //°´ÌìдÈÕÖ¾ | 
| const WRITE_MODE_PERHOUR = 1; //°´Ð¡Ê±Ð´ÈÕÖ¾ | 
|   | 
| const DEF_LOG_LEVEL = LOG_LEVEL_INFO;    //ĬÈÏDebugµÈ¼¶ | 
| const DEF_WRITE_MODE = WRITE_MODE_PERDAY; //ĬÈϰ´ÌìдÈÕÖ¾ | 
|   | 
| $LOG_LEVEL_STR_ARRAY = array('Debug', 'Info', 'Warn', 'Error', 'Fatal'); | 
|   | 
| class Log4Me | 
| { | 
|     private $m_sDir; | 
|     private $m_sFileName; | 
|     private $m_LOG_LEVEL; | 
|     private $m_WRITE_MODE; | 
|     private $m_sFullLogPath;  //ÍêÕûÈÕ־·¾¶ | 
|     private $m_sAffixStr; | 
|     function __construct($dir, $fileName, $logLev = DEF_LOG_LEVEL, $writeMode = DEF_WRITE_MODE) | 
|     { | 
|         $this->m_sDir = $dir;           | 
|         $this->m_sFileName = $fileName; | 
|         $this->m_LOG_LEVEL = $logLev; | 
|         $this->m_WRITE_MODE = $writeMode; | 
|         $this->m_sFullLogPath = ''; | 
|     } | 
|      | 
|     private function _check_and_create_new_log_file() | 
|     { | 
|         $bCreate = false; | 
|         $curLogPath = ''; | 
|         if ($this->m_WRITE_MODE === WRITE_MODE_PERDAY) | 
|         { | 
|             $curLogPath = sprintf("%s\\%s_%s.log", $this->m_sDir, $this->m_sFileName, date("Ymd")); | 
|         } | 
|         else { | 
|             //Èç¹ûΪ¿Õ£¬¾Í´´½¨ÈÕÖ¾ | 
|             $curLogPath = sprintf("%s\\%s\\%s_%s.log", $this->m_sDir, date("Ymd"), $this->m_sFileName, date("H")); | 
|         } | 
|                      | 
|         //Èç¹ûΪ¿Õ£¬¾Í´´½¨ÈÕÖ¾ | 
|         if ($this->m_sFullLogPath === '') | 
|         { | 
|             $bCreate = true; | 
|         } | 
|         else  | 
|         { | 
|             //ÈÕÆÚ¸Ä±äÁË£¬ÐèÒª´´½¨ÐÂÈÕÖ¾ | 
|             if ($curLogPath != $this->m_sFullLogPath) | 
|             { | 
|                 $bCreate = true; | 
|             } | 
|         } | 
|          | 
|         if ($bCreate) | 
|         {     | 
|             //²»´æÔÚÎļþ¼Ð£¬´´½¨ | 
|             file_exists($dir = dirname($curLogPath)) || mkdir($dir, 0777, true); | 
|             $this->m_sFullLogPath = $curLogPath; | 
|         } | 
|     } | 
|      | 
|     private function _log($info, $level) | 
|     { | 
|         global $LOG_LEVEL_STR_ARRAY; | 
|         //µÈ¼¶µÍÓÚµ±Ç°ÉèÖõÄÈÕÖ¾µÈ¼¶£¬²»Ð´ÈÕÖ¾ | 
|         if ($level < $this->m_LOG_LEVEL) | 
|         { | 
|             return; | 
|         } | 
|          | 
|         //¼ì²éÊÇ·ñÐèÒªÖØÐ´´½¨ÈÕÖ¾Îļþ£¬Èç¹ûÐèÒª¾Í´´½¨ | 
|         $this->_check_and_create_new_log_file(); | 
|         //дÈÕÖ¾ | 
|         if (empty($this->m_sAffixStr)) | 
|         { | 
|             $info = sprintf("%s\t%s\t%s\r\n", date("Y-m-dTH:i:s"), $LOG_LEVEL_STR_ARRAY[$level], $info); | 
|         } | 
|         else | 
|         { | 
|             $info = sprintf("%s\t%s\t%s\t%s\r\n", date("Y-m-dTH:i:s"), $LOG_LEVEL_STR_ARRAY[$level],  | 
|                             $this->m_sAffixStr, $info); | 
|         } | 
|         file_put_contents($this->m_sFullLogPath, $info, FILE_APPEND); | 
|     } | 
|      | 
|     //ÉèÖø½¼Ó×Ö·û´® | 
|     public function SetAffixStr($affix) | 
|     { | 
|         $this->m_sAffixStr = $affix; | 
|     } | 
|     //»ñÈ¡¸½¼Ó×Ö·û´® | 
|     public function GetAffixStr() | 
|     { | 
|         return $this->m_sAffixStr; | 
|     } | 
|      | 
|     public function Debug($info) | 
|     { | 
|         $this->_log($info, LOG_LEVEL_DEBUG); | 
|     } | 
|      | 
|     public function Info($info) | 
|     { | 
|         $this->_log($info, LOG_LEVEL_INFO); | 
|     } | 
|      | 
|     public function Warn($info) | 
|     { | 
|         $this->_log($info, LOG_LEVEL_WARN); | 
|     } | 
|      | 
|     public function Error($info) | 
|     { | 
|         $this->_log($info, LOG_LEVEL_ERROR); | 
|     } | 
|      | 
|     public function Fatal($info) | 
|     { | 
|         $this->_log($info, LOG_LEVEL_FATAL); | 
|     } | 
| } | 
|   | 
| ?> |