123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- class ModelLogs {
- private $logs;
- /**
- * 写日志, 最多64k
- * @param unknown_type $params 信息
- * @param unknown_type $file 地址
- */
- public function debug($params, $file='debug.txt')
- {
- clearstatcache();
- $dir = PATH_DAT. 'log/';
- $file = $dir . $file . '.php';
- if( !is_dir($dir) ){
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- }
- if (file_exists($file)) {
- $size = @filesize($file);
- } else {
- touch($file) && chmod($file, PRODUCTION_SERVER ? 0664 : 0666);
- $size = 0;
- }
- $time = date('Y-m-d H:i:s');
- $contents = ($size ? '' : "<?php die();?>\n") . $time. "\n" . var_export($params, true) . "\n\n";
- file_put_contents($file, $contents, $size<64*1024 ? FILE_APPEND : null);
- }
- /**
- * 写日志-无大小限制-按小时散列-适合大型日志
- * @param unknown $params
- * @param string $file
- */
- public function debug2($params, $filename='log.txt')
- {
- $ymd = date('Ymd');
- $dir = PATH_DAT."{$ymd}/";
- if (!is_dir($dir))
- {
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- }
- $h = date('H');
- $filepath = "{$dir}{$filename}_{$h}.log";
- $str = is_array($params) ? json_encode($params) : $params;
- return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
- }
- /**
- * 写日志-无大小限制-适合大型日志
- * @param $params
- * @param string $filename
- * @param string $path
- * @return bool|int
- * Created by: Owen
- * Created on: 2020/3/10 17:00
- */
- public function debug3($params, $filename='log.txt',$path = "")
- {
- $ymd = date('Ymd');
- //$dir = PATH_DAT."logs/"."{$ymd}/".$path;
- $dir = PATH_DAT."logs/"."{$ymd}/";
- if (!is_dir($dir)) {
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- if(function_exists('chgrp')&&php_sapi_name()=='cli'){//防止root创建www无权限
- @chgrp($dir,'www');
- @chown($dir,'www');
- }
- }
- if(empty($filename)){
- $filename = 'other';
- }
- $pos = strrpos($filename, '.');
- $filename = $pos !== false ? substr($filename, 0, $pos) : $filename;
- $filepath = "{$dir}{$filename}.log";
- if(!file_exists($filepath)){
- touch($filepath);
- if(function_exists('chgrp')&&php_sapi_name()=='cli'){//防止root创建的文件www无权限写
- @chgrp($filepath,'www');
- @chown($filepath,'www');
- }
- }
- $str = is_array($params) ? json_encode($params,JSON_UNESCAPED_UNICODE) : $params;
- return file_put_contents($filepath, date('Y-m-d H:i:s')."##{$str} \n", FILE_APPEND);
- // $data = ['log_level' => 'info', 'log_module' => $filename, 'time' => date('Y-m-d H:i:s'), 'host_ip' => SERVER_INT_IP, 'content' => $params];
- // return file_put_contents($filepath, json_encode($data)."\n", FILE_APPEND);
- }
- /**
- * 写日志-无大小限制-适合大型日志
- * @param $params
- * @param string $filename
- * @param string $path
- * @return bool|int
- * Created by: Owen
- * Created on: 2020/3/10 17:01
- */
- public function debug4($params, $filename='log.txt',$path = "")
- {
- $dir = PATH_DAT.$path;
- if (!is_dir($dir)){
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- }
- $filepath = "{$dir}{$filename}";
- $str = is_array($params) ? json_encode($params) : $params;
- return file_put_contents($filepath, "{$str} \n", FILE_APPEND);
- }
-
- /**
- * 写日志-无大小限制-适合大型日志
- * @param unknown $params
- * @param string $file
- */
- public function debug5($params, $filename='log.txt',$path = "")
- {
- $dir = PATH_DAT.$path;
- if (!is_dir($dir)){
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- }
- $filepath = "{$dir}{$filename}";
- $str = is_array($params) ? json_encode($params) : $params;
- return file_put_contents($filepath, "{$str} \n", FILE_APPEND);
- }
-
- /**
- * 写日志-无大小限制-适合大型日志
- * @param unknown $params
- * @param string $file
- */
- public function todebug($params, $filename='log.txt')
- {
- return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
- $ymd = date('Ymd');
- $dir = "/data/datalog/{$ymd}/";
- if (!is_dir($dir))
- {
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- chgrp($dir, 'wwwsp');
- }
- $filepath = "{$dir}{$filename}";
- $str = is_array($params) ? json_encode($params) : $params;
- return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
- }
- /**
- * 写日志-无大小限制-适合大型日志
- * @param unknown $params
- * @param string $file
- */
- public function nodatedebug($params, $filename='log.txt', $dir = 'log')
- {
- return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
- $dir = PATH_DAT.$dir.'/';
- if (!is_dir($dir))
- {
- $old = umask(0);
- mkdir($dir, PRODUCTION_SERVER ? 0775 : 0777, true);
- umask($old);
- }
- $filepath = "{$dir}{$filename}";
- $str = is_array($params) ? json_encode($params) : $params;
- return file_put_contents($filepath, date('Y-m-d H:i:s')." {$str} \n", FILE_APPEND);
- }
- /**
- * boyaa log
- * @param unknown $str
- */
- public function bylogs( $str){
- if( ! is_object( $this->logs['bylogs'])){
- include_once PATH_LIB . 'class.bylog.php';
- $this->logs['bylogs'] = new bylog();
- }
- return $this->logs['bylogs']->write( $str);
- }
- /**
- * UDP SWOOLE上报日志
- * @param string $type
- * @param string $filename
- * @param unknown $params
- */
- public function logsUdp( $type='debug',$params, $filename='debug.txt')
- {
- if (1) { // 一台服务器暂时不走UDP日志
- is_array($params) && $params = var_export($params, TRUE);
- self::$type($params, $filename);
- return true;
- }
- $configInc = oo::$config['swooleLogs'];
- $host = $configInc[0];
- $port = $configInc[1];
- $error_code = 0;
- $error_message = '';
- $socket = stream_socket_client("udp://{$host}:{$port}", $error_code, $error_message, 300);
- $log_buff_str = array('filename'=>$filename,'type'=>$type,'content'=>is_array($params) ? var_export($params, TRUE) : $params);
- $log_buff_str = json_encode( $log_buff_str);
- @fwrite($socket, $log_buff_str);
- }
- /**
- * Notes:通用日志
- * User : wsc
- * Date : 2020/1/9 18:44
- * @param $params
- * @param string $fname
- * @param int $fsize
- * @param bool $sign
- * @return bool
- */
- public function commlog($params, $fname = 'debug.txt', $fsize = 1, $sign=false){
- if(!is_string($fname)){
- //文件名一定是字符串
- return false;
- }
- is_scalar( $params ) or ($params = var_export( $params, true )); //是简单数据
- if( !$params ){
- return false;
- }
- clearstatcache();
- // if(!IS_DEBUF){
- // $filename = str_replace('/','_',$fname);
- // return $this->debug3($params, $filename); //使用同一日志系统,方便ELK收集
- // }
- $file = PATH_DAT.'logs/' . $fname . '.php';
- $dir = dirname( $file );
- if( !is_dir( $dir ) ) mkdir( $dir, 0775, true );
- $size = file_exists( $file ) ? @filesize( $file ) : 0;
- $flag = $size < max( 1, $fsize ) * 1024 * 1024; //标志是否附加文件.文件控制在1M大小
- if( !$flag && $sign === 'bak' ){//文件超过大小自动备份
- $bak = $dir . "/bak/$fname/";
- if( !is_dir( $bak ) ) mkdir( $bak, 0775, true );
- $fname = explode( '/', $fname );
- $fname = $fname[count( $fname ) - 1];
- $bak .= $fname . '-' . date( 'YmdHis' ) . '.php';
- copy( $file, $bak );
- }
- $pwd = 'mvc';//默认密码
- $prefix = $size && $flag ? '' : "<?php (isset(\$_GET['pwd']) && (\$_GET['pwd']==='{$pwd}')) or die();?>\n";
- @file_put_contents( $file, $prefix .date('Y-m-d H:i:s').'##'. $params . "\n", $flag ? FILE_APPEND : null );
- return true;
- }
- }
|