logs.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. class ModelLogs {
  3. private $logs;
  4. /**
  5. * 写日志, 最多64k
  6. * @param unknown_type $params 信息
  7. * @param unknown_type $file 地址
  8. */
  9. public function debug($params, $file='debug.txt')
  10. {
  11. clearstatcache();
  12. $dir = PATH_DAT. 'log/';
  13. $file = $dir . $file . '.php';
  14. if( !is_dir($dir) ){
  15. $old = umask(0);
  16. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  17. umask($old);
  18. }
  19. if (file_exists($file)) {
  20. $size = @filesize($file);
  21. } else {
  22. touch($file) && chmod($file, PRODUCTION_SERVER ? 0664 : 0666);
  23. $size = 0;
  24. }
  25. $time = date('Y-m-d H:i:s');
  26. $contents = ($size ? '' : "<?php die();?>\n") . $time. "\n" . var_export($params, true) . "\n\n";
  27. file_put_contents($file, $contents, $size<64*1024 ? FILE_APPEND : null);
  28. }
  29. /**
  30. * 写日志-无大小限制-按小时散列-适合大型日志
  31. * @param unknown $params
  32. * @param string $file
  33. */
  34. public function debug2($params, $filename='log.txt')
  35. {
  36. $ymd = date('Ymd');
  37. $dir = PATH_DAT."{$ymd}/";
  38. if (!is_dir($dir))
  39. {
  40. $old = umask(0);
  41. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  42. umask($old);
  43. }
  44. $h = date('H');
  45. $filepath = "{$dir}{$filename}_{$h}.log";
  46. $str = is_array($params) ? json_encode($params) : $params;
  47. return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
  48. }
  49. /**
  50. * 写日志-无大小限制-适合大型日志
  51. * @param $params
  52. * @param string $filename
  53. * @param string $path
  54. * @return bool|int
  55. * Created by: Owen
  56. * Created on: 2020/3/10 17:00
  57. */
  58. public function debug3($params, $filename='log.txt',$path = "")
  59. {
  60. $ymd = date('Ymd');
  61. //$dir = PATH_DAT."logs/"."{$ymd}/".$path;
  62. $dir = PATH_DAT."logs/"."{$ymd}/";
  63. if (!is_dir($dir)) {
  64. $old = umask(0);
  65. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  66. umask($old);
  67. if(function_exists('chgrp')&&php_sapi_name()=='cli'){//防止root创建www无权限
  68. @chgrp($dir,'www');
  69. @chown($dir,'www');
  70. }
  71. }
  72. if(empty($filename)){
  73. $filename = 'other';
  74. }
  75. $pos = strrpos($filename, '.');
  76. $filename = $pos !== false ? substr($filename, 0, $pos) : $filename;
  77. $filepath = "{$dir}{$filename}.log";
  78. if(!file_exists($filepath)){
  79. touch($filepath);
  80. if(function_exists('chgrp')&&php_sapi_name()=='cli'){//防止root创建的文件www无权限写
  81. @chgrp($filepath,'www');
  82. @chown($filepath,'www');
  83. }
  84. }
  85. $str = is_array($params) ? json_encode($params,JSON_UNESCAPED_UNICODE) : $params;
  86. return file_put_contents($filepath, date('Y-m-d H:i:s')."##{$str} \n", FILE_APPEND);
  87. // $data = ['log_level' => 'info', 'log_module' => $filename, 'time' => date('Y-m-d H:i:s'), 'host_ip' => SERVER_INT_IP, 'content' => $params];
  88. // return file_put_contents($filepath, json_encode($data)."\n", FILE_APPEND);
  89. }
  90. /**
  91. * 写日志-无大小限制-适合大型日志
  92. * @param $params
  93. * @param string $filename
  94. * @param string $path
  95. * @return bool|int
  96. * Created by: Owen
  97. * Created on: 2020/3/10 17:01
  98. */
  99. public function debug4($params, $filename='log.txt',$path = "")
  100. {
  101. $dir = PATH_DAT.$path;
  102. if (!is_dir($dir)){
  103. $old = umask(0);
  104. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  105. umask($old);
  106. }
  107. $filepath = "{$dir}{$filename}";
  108. $str = is_array($params) ? json_encode($params) : $params;
  109. return file_put_contents($filepath, "{$str} \n", FILE_APPEND);
  110. }
  111. /**
  112. * 写日志-无大小限制-适合大型日志
  113. * @param unknown $params
  114. * @param string $file
  115. */
  116. public function debug5($params, $filename='log.txt',$path = "")
  117. {
  118. $dir = PATH_DAT.$path;
  119. if (!is_dir($dir)){
  120. $old = umask(0);
  121. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  122. umask($old);
  123. }
  124. $filepath = "{$dir}{$filename}";
  125. $str = is_array($params) ? json_encode($params) : $params;
  126. return file_put_contents($filepath, "{$str} \n", FILE_APPEND);
  127. }
  128. /**
  129. * 写日志-无大小限制-适合大型日志
  130. * @param unknown $params
  131. * @param string $file
  132. */
  133. public function todebug($params, $filename='log.txt')
  134. {
  135. return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
  136. $ymd = date('Ymd');
  137. $dir = "/data/datalog/{$ymd}/";
  138. if (!is_dir($dir))
  139. {
  140. $old = umask(0);
  141. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  142. umask($old);
  143. chgrp($dir, 'wwwsp');
  144. }
  145. $filepath = "{$dir}{$filename}";
  146. $str = is_array($params) ? json_encode($params) : $params;
  147. return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
  148. }
  149. /**
  150. * 写日志-无大小限制-适合大型日志
  151. * @param unknown $params
  152. * @param string $file
  153. */
  154. public function nodatedebug($params, $filename='log.txt', $dir = 'log')
  155. {
  156. return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
  157. $dir = PATH_DAT.$dir.'/';
  158. if (!is_dir($dir))
  159. {
  160. $old = umask(0);
  161. mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
  162. umask($old);
  163. }
  164. $filepath = "{$dir}{$filename}";
  165. $str = is_array($params) ? json_encode($params) : $params;
  166. return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
  167. }
  168. /**
  169. * boyaa log
  170. * @param unknown $str
  171. */
  172. public function bylogs( $str){
  173. if( ! is_object( $this->logs['bylogs'])){
  174. include_once PATH_LIB . 'class.bylog.php';
  175. $this->logs['bylogs'] = new bylog();
  176. }
  177. return $this->logs['bylogs']->write( $str);
  178. }
  179. /**
  180. * UDP SWOOLE上报日志
  181. * @param string $type
  182. * @param string $filename
  183. * @param unknown $params
  184. */
  185. public function logsUdp( $type='debug',$params, $filename='debug.txt')
  186. {
  187. if (1) { // 一台服务器暂时不走UDP日志
  188. is_array($params) && $params = var_export($params, TRUE);
  189. self::$type($params, $filename);
  190. return true;
  191. }
  192. $configInc = oo::$config['swooleLogs'];
  193. $host = $configInc[0];
  194. $port = $configInc[1];
  195. $error_code = 0;
  196. $error_message = '';
  197. $socket = stream_socket_client("udp://{$host}:{$port}", $error_code, $error_message, 300);
  198. $log_buff_str = array('filename'=>$filename,'type'=>$type,'content'=>is_array($params) ? var_export($params, TRUE) : $params);
  199. $log_buff_str = json_encode( $log_buff_str);
  200. @fwrite($socket, $log_buff_str);
  201. }
  202. /**
  203. * Notes:通用日志
  204. * User : wsc
  205. * Date : 2020/1/9 18:44
  206. * @param $params
  207. * @param string $fname
  208. * @param int $fsize
  209. * @param bool $sign
  210. * @return bool
  211. */
  212. public function commlog($params, $fname = 'debug.txt', $fsize = 1, $sign=false){
  213. if(!is_string($fname)){
  214. //文件名一定是字符串
  215. return false;
  216. }
  217. is_scalar( $params ) or ($params = var_export( $params, true )); //是简单数据
  218. if( !$params ){
  219. return false;
  220. }
  221. clearstatcache();
  222. // if(!IS_DEBUF){
  223. // $filename = str_replace('/','_',$fname);
  224. // return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
  225. // }
  226. $file = PATH_DAT.'logs/' . $fname . '.php';
  227. $dir = dirname( $file );
  228. if( !is_dir( $dir ) ) mkdir( $dir, 0775, true );
  229. $size = file_exists( $file ) ? @filesize( $file ) : 0;
  230. $flag = $size < max( 1, $fsize ) * 1024 * 1024; //标志是否附加文件.文件控制在1M大小
  231. if( !$flag && $sign === 'bak' ){//文件超过大小自动备份
  232. $bak = $dir . "/bak/$fname/";
  233. if( !is_dir( $bak ) ) mkdir( $bak, 0775, true );
  234. $fname = explode( '/', $fname );
  235. $fname = $fname[count( $fname ) - 1];
  236. $bak .= $fname . '-' . date( 'YmdHis' ) . '.php';
  237. copy( $file, $bak );
  238. }
  239. $pwd = 'mvc';//默认密码
  240. $prefix = $size && $flag ? '' : "<?php (isset(\$_GET['pwd']) && (\$_GET['pwd']==='{$pwd}')) or die();?>\n";
  241. @file_put_contents( $file, $prefix .date('Y-m-d H:i:s').'##'. $params . "\n", $flag ? FILE_APPEND : null );
  242. return true;
  243. }
  244. }