php日志怎么实现
PHP日志实现方法
使用内置函数error_log
PHP内置error_log()函数可将日志写入指定文件或系统日志。默认配置在php.ini中设置,可通过error_log指令指定路径。
error_log("This is an error message", 3, "/path/to/error.log");
配置php.ini
修改php.ini文件中的日志相关参数,控制全局日志行为:
log_errors = On
error_log = /var/log/php_errors.log
error_reporting = E_ALL
自定义日志类
创建封装类实现更灵活的日志管理,支持不同级别和存储方式:
class Logger {
public static function log($message, $level = 'INFO') {
$logEntry = date('[Y-m-d H:i:s]') . " [$level] $message" . PHP_EOL;
file_put_contents('/path/to/app.log', $logEntry, FILE_APPEND);
}
}
使用Monolog库
通过Composer安装Monolog实现高级日志功能:
composer require monolog/monolog
示例代码:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
$log->warning('This is a warning');
框架集成日志
主流框架内置日志组件:
- Laravel:通过
Log门面use Illuminate\Support\Facades\Log; Log::emergency($message); - Symfony:使用Monolog组件
- CodeIgniter:通过
log_message()函数
日志分割与归档
结合Linux的logrotate工具或实现自定义分割逻辑:
if (filesize('app.log') > 1024*1024) {
rename('app.log', 'app.' . date('YmdHis') . '.log');
}
数据库日志存储
将日志写入数据库便于查询分析:
$stmt = $pdo->prepare("INSERT INTO logs (level, message, created_at) VALUES (?, ?, ?)");
$stmt->execute([$level, $message, date('Y-m-d H:i:s')]);
错误处理器注册
通过set_error_handler捕获所有PHP错误:
set_error_handler(function($errno, $errstr, $errfile, $errline) {
error_log("Error [$errno] $errstr in $errfile on line $errline");
return true;
});
性能日志记录
使用microtime记录执行耗时:
$start = microtime(true);
// 业务代码
$elapsed = round((microtime(true) - $start)*1000, 2);
file_put_contents('perf.log', "Execution took {$elapsed}ms", FILE_APPEND);
日志级别控制
实现分级日志管理,区分DEBUG/INFO/WARNING等级别:
define('LOG_LEVEL', 'DEBUG');
function write_log($message, $level) {
if (array_search($level, ['DEBUG','INFO','WARNING','ERROR'])
>= array_search(LOG_LEVEL, ['DEBUG','INFO','WARNING','ERROR'])) {
error_log("[$level] $message");
}
}






