如何在php中创建日志文件

110

我想为我的系统创建一个日志文件,以便记录/注册系统内部执行的每个操作。但我不知道如何做。

比如说,我有这段PHP代码来执行登录功能。

public function hasAccess($username,$password){
    $form = array();
    $form['username'] = $username;
    $form['password'] = $password;
    

    $securityDAO = $this->getDAO('SecurityDAO');
    $result = $securityDAO->hasAccess($form);
    //var_dump($form);
    //var_dump($result);
    if($result[0]['success']=='1'){
        $this->Session->add('user_id', $result[0]['id']);
        //$this->Session->add('username', $result[0]['username']);
        //$this->Session->add('roleid', $result[0]['roleid']);
        return $this->status(0,true,'auth.success',$result);
    }else{
        return $this->status(0,false,'auth.failed',$result);
    }
}

现在我想创建一个名为“今天日期”的日志文件,然后当该函数用于登录时,它将写入用户已登录,其他功能也是如此。但我每天只想要一个文件。

有没有人能够友善地指导和教我应该如何编写代码?

11个回答

-1
这是我的PHP日志函数:
如果你想编辑日志行 $maxLogs=5 或者写入日志的顺序 $logOrder='top'
<?php
##### Start Script
lg('Script start','start');

#Code......
lg('Script end','end');

function lg($str,$mod='Your Log Category'){
    
    $ts = microtime(true);
    if(!defined('logTimer')){
        define('logTimer',microtime(true));
    }
    $diff=abs(round(($ts-logTimer)*1000,2));
    $maxLogs=5;
    $logOrder='top';#new Logs at top
    
    
    $filename = './log.txt';
    $log=[];
    if(!file_exists($filename)){
        if(!file_put_contents($filename,json_encode($log,128))){
            echo "Can’t open to write '$filename' Check Permissions";
            return;
        }
    }else{
        $c=file_get_contents($filename);
        if(trim($c)==''){$c='[]';}
        
        $log =@json_decode($c,true);
        if(!is_Array($log)){$log=[];}
    }
    $new=['mod'=>$mod,'date'=> date('Y-m-d H:i:s')." Scripttime: ".$diff."ms",'log'=>$str];
    if($logOrder=='top'){
        array_unshift($log , $new);
        $log=array_slice($log,0,$maxLogs);
        }else{
        $log[]=$new;
        $log=array_slice($log,0-$maxLogs,$maxLogs);
    }
    
    
    $logs=json_encode($log,128);
    if(!file_put_contents($filename,$logs) ){echo ("Can’t open to write '$filename' Check Permissions") ;return;}
    return $str;
}
?>

输出结果如下:

[
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:02 0.33ms",
        "log": "test 2"
    },
    {
        "mod": "start",
        "date": "2022-08-04 13:48:29 0ms",
        "log": "test"
    },
    {
        "mod": "delete",
        "date": "2022-08-04 13:48:29 0.27ms",
        "log": "test 2"
    }      
   
]

1
现在我们有一个糟糕的代码。它有着容量限制,性能问题,由于竞态条件导致整个日志文件被截断,总体代码质量很差。 - Your Common Sense
哈哈,这段代码不是为亚马逊服务器等特定服务编写的。它只是默认的编程代码。你期望有一个包含包、方法和其他库等的 PHP 类吗? - dazzafact

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接