log.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * 日志类
  4. * @package_log log
  5. */
  6. class Log
  7. {
  8. /**
  9. * 日志文件大小限制
  10. * @var int 字节数
  11. */
  12. private static $log_size = 1048576; // 1024 * 1024 * 5 = 5MB
  13. /**
  14. * 设置单个日志文件大小限制
  15. *
  16. * @param int $size 字节数
  17. */
  18. public static function set_size($size)
  19. {
  20. if( is_numeric($size) ){
  21. self::$log_size = $size;
  22. }
  23. }
  24. /**
  25. * 写日志
  26. *
  27. * @param string $log_message 日志信息
  28. * @param string $log_type 日志类型
  29. */
  30. public static function write($log_message, $log_type = 'log')
  31. {
  32. $dir = getcwd().DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.$type;
  33. if(!is_dir($dir)){
  34. if(!mkdir($dir)){
  35. return false;
  36. }
  37. }
  38. if (!is_writable( $dir )) exit('LOG_PATH is not writeable !');
  39. $s_now_time = date('[Y-m-d H:i:s]');
  40. $log_now_day = date('Y_m_d');
  41. // 根据类型设置日志目标位置
  42. $log_path = $dir;
  43. switch($log_type)
  44. {
  45. case 'debug':
  46. $log_path .= 'Out_' . $log_now_day . '.log';
  47. break;
  48. case 'error':
  49. $log_path .= 'Err_' . $log_now_day . '.log';
  50. break;
  51. case 'log':
  52. $log_path .= 'Log_' . $log_now_day . '.log';
  53. break;
  54. default:
  55. $log_path .= 'Log_' . $log_now_day . '.log';
  56. break;
  57. }
  58. //检测日志文件大小, 超过配置大小则重命名
  59. if (file_exists($log_path) && self::$log_size <= filesize($log_path)) {
  60. $s_file_name = substr(basename($log_path), 0, strrpos(basename($log_path), '.log')). '_' . time() . '.log';
  61. rename($log_path, dirname($log_path) . DS . $s_file_name);
  62. }
  63. // 写日志, 返回成功与否
  64. return error_log("$s_now_time $log_message\n", 3, $log_path);
  65. }
  66. }