PHP日志记录函数2

//创建日志保存所需目录
function make_dir($folder)
{
    $reval = false;
    if(!file_exists($folder))
    {
        /* 如果目录不存在则尝试创建该目录 */
        @umask(0);
        /* 将目录路径拆分成数组 */
        preg_match_all('/([^\/]*)\/?/i', $folder, $atmp);
        /* 如果第一个字符为/则当作物理路径处理 */
        $base = ($atmp[0][0] == '/') ? '/' : '';
        /* 遍历包含路径信息的数组 */
        foreach ($atmp[1] AS $val)
        {
            if ('' != $val)
            {
                $base .= $val;
                if ('..' == $val || '.' == $val)
                {
                    /* 如果目录为.或者..则直接补/继续下一个循环 */
                    $base .= '/';
                    continue;
                }
            }
            else
            {
                continue;
            }
            $base .= '/';
            if (!file_exists($base))
            {
                /* 尝试创建目录,如果创建失败则继续循环 */
                if (@mkdir(rtrim($base, '/'), 0777))
                {
                    @chmod($base, 0777);
                    $reval = true;
                }
            }
        }
    }
    else
    {
        /* 路径已经存在。返回该路径是不是一个目录 */
        $reval = is_dir($folder);
        /** 如果是文件夹,则强制改为0777 **/
        if($reval){ @chmod($folder, 0777); }
    }
    clearstatcache();
    return $reval;
}
//生成日志文件,并设置权限777
function chmod_custom($filename, $mode = 0777)
{
    return file_exists($filename)? chmod($filename, $mode) : FALSE;
}

//写入日志
function log_message($level = 'error', $message, $dir_path = '', $file_affix = '')
{
    // 验证允许记录的日志类型
    $level = strtoupper($level);

    $dir_path = trim($dir_path);
    $dir_path = storage_path("logs/{$dir_path}");
    // 如果创建文件夹失败,则返回FALSE
    
    if(!make_dir($dir_path)){
        return FALSE;
    }

    $cache_file_path = $dir_path . '/' . $file_affix. '.log';
    /** 如果文件已存在,则强制改为可写状态 **/
    chmod_custom($cache_file_path, 0777);
    $message =  $level . ' - ' . date('Y-m-d H:i:s') . ' --> ' . $message . "\r\n";
    return file_put_contents($cache_file_path, $message, FILE_APPEND | LOCK_EX);
}

仅有一条评论

添加新评论