写日志(log)

以下为我自己写的一个写日志的类,比较简洁。

<?php
class Log
{
    /**
     * @Purpose      :  写日志
     * @Method Name  :  writeLog()
     * @parameter     :  string $explain          错误说明
     *                  string $error_location    错误位置
     *                  string $dir               保存日志的文件夹名
     * @return         :  (无)
     */
    function writeLog($explain,$error_location,$dir){
        if (empty($dir)) return false;
        $error_msg = "";
        if(strlen($explain) != 0){
            $error_msg .= '['.date("Y-m-d H:i:s",time()).' error_explain: ] '. $explain;
        }
        if(strlen($error_location) != 0){
            $error_msg .= ' [ error_location: ] '. $error_location;
        }
        if(! is_dir($dir)){
            mkdir($dir,0777);
            system("chown root.root {$dir} -R;chmod 777 {$dir} -R");    // 修改目录所有者,所属组和权限
        }
        $file_name = date('Y-m-d',time()).'.txt';
        $file_name = $dir.$file_name;
        if(! $file_name == false){
            system("chown root.root {$file_name} -R; chmod 777 {$file_name} -R");
            $handle1 = fopen($file_name,'w');
            fwrite($handle1,"//log file , please do not modify me! \n");
            fwrite($handle1,'//Created on '.date('M j, Y, G:i',time())."\n");    // 类似于这种格式 :Created on Jun 26,2017, 11:22
            fclose($handle1);
        }
        if(is_file($file_name)){
            $handle2 = fopen($file_name,'a');
            fwrite($handle2,"$error_msg \n");
            fclose($handle2);
        }
        /*
        最后打印出来的日志类似于这样:
        //log file , please do not modify me!
        //Created on Jun 26, 2017, 11:34
        [2017-06-26 11:34:29 error_explain: ] test_explain [ error_location: ] the error at E:\www\test\index.php line 55
        */
     }

    /**
     * @Purpose       :    获取错误所在位置
     * @Method  Name  :    getErrorLine()
     * @Parameters    :    string  $line    行号
     * @Return array  :    $error_line      错误所在位置
     */
    public function getErrorLine($line)
    {
        $error_line = __FILE__ . ' line ' . $line ;
        return ' '.$error_line;
    }
}
$Log = new Log();
$Log -> writeLog('test_explain','the error at' . $Log -> getErrorLine(__LINE__),'E:/www/test/log/');

下面这个是一个单独的方法:

 

    /**
     * @purpose :   写日志
     * @param   :   string  $data   :   写入的数据
     *          :   string  $logDir :   日志目录
     *          :   string  $file   :   文件名前缀
     * @Author  :   daicr
     * @Time    :   2018-11-20
     */
    public function writeLog($data,$logDir='/tmp/', $fileName='') {
        $write_line    = "";
        $now    = date('Y-m-d H:i:s',time());
        if(strlen($data)>0) {
            $write_line    .= "[" . date('Y-m-d H:i:s',time()) . "]" . $data;
        }
        $dir = $logDir;
        if(!is_dir($dir)) {
            mkdir($dir, 0777);
        }
        system("chown justswitch.justswitch {$dir} -R; chmod 777 {$dir} -R;");

        $fileName = $fileName.date('Y-m',time());
        $fileName = $dir.$fileName.".txt";
        if (false==file_exists($fileName)){
            if($fp = fopen("$fileName", 'w')) {
                system("chown justswitch.justswitch -R $dir;chmod 777 $dir -R;");
                fwrite($fp, "\n//JUST-CALL! log file, DO NOT modify me!\n".
                    "//Created on ".date("M j, Y, G:i")."\n");
                fclose($fp);
            }
        }
        if($fp = fopen("$fileName",'a')) {
            fwrite($fp,"$write_line\n");
            fclose($fp);
        }

        system("chown justswitch.justswitch {$fileName};chmod 777 {$fileName};");
    }

 

 

 

system($commond, $return_var)

commond   : 要执行的命令

return_var  : 外部命令执行后要返回的状态

成功则返回命令输出的最后一行,失败则返回 false

 

本文为原创作品,如有转载请注明出处http://www.cnblogs.com/chrdai/p/7082146.html

posted @ 2017-06-26 19:43  Chrdai  阅读(505)  评论(0编辑  收藏  举报