Files
Pichome/admin/systemlog/classes/systemlog.php
2024-01-31 01:00:33 +08:00

64 lines
2.7 KiB
PHP

<?php
namespace admin\systemlog\classes;
class Systemlog{
//$arr 必须传入 level,content
public function run( $arr=array() ){
global $_G;
if( $_G['setting']['systemlog_open'] > 0 ){
$systemlog_setting = ($_G['setting']['systemlog_setting']);
//判断是否开启该类型日志
if(!isset($arr["mark"]) || (isset($systemlog_setting[$arr["mark"]]) && $systemlog_setting[$arr["mark"]]["is_open"]!=1) ){
return;
}
$file=$arr["mark"];//$arr["level"];//级别
$log=$arr["content"];
$yearmonth = "dzz";//dgmdate(TIMESTAMP, 'Ym', $_G['setting']['timeoffset']);
$logdir = DZZ_ROOT.'./data/log/';
$logfile = $logdir.$yearmonth.'_'.$file.'.php';
//检查并返回当前log文件行数
$i=0;
if( file_exists($logfile)){
$fp=fopen($logfile, "r");
while(!feof($fp)) {
//每次最多读取1M
if($data=fread($fp,1024*1024*1)){
//计算读取到的行数
$num=substr_count($data,"\n");
$i+=$num;
}
}
fclose($fp);
}
//每4000行重新生成日志文件
if($i>=4000) {
$dir = opendir($logdir);
$length = strlen($file);
$maxid = $id = 0;
while($entry = readdir($dir)) {
if(strpos($entry, $yearmonth.'_'.$file) !== false) {
$id = intval(substr($entry, $length + 8, -4));
$id > $maxid && $maxid = $id;
}
}
closedir($dir);
$logfilebak = $logdir.$yearmonth.'_'.$file.'_'.($maxid + 1).'.php';
@rename($logfile, $logfilebak);
}
if($fp = @fopen($logfile, 'a')) {
@flock($fp, 2);
if(!is_array($log)) {
$log = array($log);
}
$cur_url = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$from_url = $_SERVER['HTTP_REFERER'];
$agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT']:'';
foreach($log as $tmp) {
$tmp=implode("\t", clearlogstring(array($_G['timestamp'], $_G['username'], $_G['groupid'], $_G['clientip'],$agent,$tmp,$cur_url,$from_url))) ;
fwrite($fp, "<?PHP exit;?>\t".str_replace(array('<?', '?>'), '', $tmp)."\n");
}
fclose($fp);
}
}
}
}