如何在php中创建日志文件?

mae*_*y m 60 php logfile

我想为我的系统创建一个日志文件来注册/记录他们在系统内执行的每个操作.但我不知道该怎么做.

例如,我有这个执行登录功能的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个名为'今天的日期'的日志文件,然后当该函数用于登录时,它将写入该用户已登录,与其他功能相同.但我每天只想要一个文件.

有人能够引导并教我如何做我的代码吗?

Law*_*one 115

要写入日志文件并每天创建一个新文件,您可以将其date("j.n.Y")用作文件名的一部分.

//Something to write to txt log
$log  = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
        "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL.
        "User: ".$username.PHP_EOL.
        "-------------------------".PHP_EOL;
//Save string to log, use FILE_APPEND to append.
file_put_contents('./log_'.date("j.n.Y").'.log', $log, FILE_APPEND);
Run Code Online (Sandbox Code Playgroud)

所以你会把它放在你的hasAccess()方法中.

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

    $securityDAO = $this->getDAO('SecurityDAO');
    $result = $securityDAO->hasAccess($form);

    //Write action to txt log
    $log  = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
            "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL.
            "User: ".$username.PHP_EOL.
            "-------------------------".PHP_EOL;
    //-
    file_put_contents('./log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `PHP_EOL`就像做``\n"`或``\ r \n"`依赖于哪个os平台.我讨厌很多\n \n \n \n; n (4认同)
  • 绝对不会存储纯文本密码、句点,包括日志文件。 (4认同)
  • 如果有 2 个脚本尝试同时写入日志,并且脚本 1 的数据太多,以至于并非所有数据都写入一次 write() 中(因此 file_put_contents 将自动执行第二次 write() 以尝试写入剩余数据),并且脚本 #2 在第一个脚本第一次写入之后写入其日志,但在 script1 的第二次 write() 之前,日志将被破坏 - 您可以避免这种情况通过将 LOCK_EX 与 FILE_APPEND 组合使用(或一起,位标志)可能会出现潜在问题,然后 script2 将等待 script1 完全完成 (4认同)

JON*_*JON 9

在php中创建一个日志文件,你需要在函数上传递数据,它会为你创建日志文件.

function wh_log($log_msg)
{
    $log_filename = "log";
    if (!file_exists($log_filename)) 
    {
        // create directory/folder uploads.
        mkdir($log_filename, 0777, true);
    }
    $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log';
    // if you don't add `FILE_APPEND`, the file will be erased each time you add a log
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}
Run Code Online (Sandbox Code Playgroud)


Man*_*ish 7

同意@jon 的回答。刚刚添加修改了路径,在log里面创建目录root

 function wh_log($log_msg) {
    $log_filename = $_SERVER['DOCUMENT_ROOT']."/log";
    if (!file_exists($log_filename))
    {
        // create directory/folder uploads.
        mkdir($log_filename, 0777, true);
    }
    $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log';
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}
Run Code Online (Sandbox Code Playgroud)

刚刚添加 $_SERVER['DOCUMENT_ROOT']


Sur*_*rgy 5

请检查此文档。

http://php.net/manual/zh/function.error-log.php

例:

<?php
// Send notification through the server log if we can not
// connect to the database.
if (!Ora_Logon($username, $password)) {
    error_log("Oracle database not available!", 0);
}

// Notify administrator by email if we run out of FOO
if (!($foo = allocate_new_foo())) {
    error_log("Big trouble, we're all out of FOOs!", 1,
               "operator@example.com");
}

// another way to call error_log():
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
?>
Run Code Online (Sandbox Code Playgroud)


Pas*_*vel 5

请检查此代码,它对我来说很好用。

$data = array('shopid'=>3,'version'=> 1,'value=>1');  //here $data is dummy varaible

error_log(print_r($data,true), 3, $_SERVER['DOCUMENT_ROOT']."/your-file-name.log");

//In $data we can mention the error messege and create the log
Run Code Online (Sandbox Code Playgroud)