如何使用php在生产环境封装一个打印日志的方法?
前言
为防止项目上线后出现问题,不好定位,找不到原因,我们还是要依靠打印日志文件,找到bug出现的位置,所以,开发过程中,对可能出现错误的地方,打印日志是非常非常重要的一件事情!
封装LogService类
<?php
/*
* 日志类
* 每天生成一个日志文件
*/
class LogService
{
public static function writeLog($data, $dir = '')
{
//默认存放打印日志的目录
$dir_path = __DIR__ . '/logs/';
if ($dir) {
//ltrim移除字符串左侧的字符/,这里统一设置/
$dir_path .= ltrim($dir, '/');
}
//检查当前目录是否存在
if (!is_dir($dir_path)) {
//如果不存在则生成目录权限为777
mkdir($dir_path, 0777, true);
}
//rtrim移除字符串右侧的空白字符或其他预定义字符
$filepath = rtrim($dir_path, '/') . '/' . date("Ymd") . '.log';
//设置一个打印日志的起始文字
$delimiter_start = "\n+---------------------------- log start -----------------------------+\n记录时间:" . date("Y-m-d H:i:s") . "\n";
//设置一个打印日志的结束文字
$delimiter_end = "\n+---------------------------- log end -----------------------------+\n";
//将要打印的文字以json形式,并转义成中文的格式追加的指定目录中的日志文件内
file_put_contents($filepath, $delimiter_start . json_encode($data, JSON_UNESCAPED_UNICODE) . $delimiter_end, FILE_APPEND);
}
}
//要打印的数据
$msg = array(
'name' => '奇葩天地网',
'url' => 'www.qipa250.com',
'short_name' => '奇葩250',
);
//静态函数,不用实例化,可以直接引用方法
LogService::writeLog($msg, 'qipa'); //写入日志到logs下的qipa目录中
?>
file_put_contents介绍
file_put_contents() 函数把一个字符串写入文件中。
该函数访问文件时,遵循以下规则:
如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 *filename* 副本的内置路径
如果文件不存在,将创建一个文件
打开文件
如果设置了 LOCK_EX,那么将锁定文件
如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容
向文件中写入数据
关闭文件并对所有文件解锁
如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。
语法
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
参数 | 描述 |
---|---|
file | 必填项,指定数据需要写入的文件名称,若是文件不存在,则创建 |
data | 必填项,要写入文件的数据。可以是字符串、数组或数据流。 |
mode | 可选。规定如何打开/写入文件。可能的值: FILE_USE_INCLUDE_PATH, FILE_APPEND , LOCK_EX |
context | 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。 |