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