本文目录导读:

在PHP项目中设置日志级别,通常有以下几种方式:
使用错误处理函数(内建方式)
// 设置错误报告级别
error_reporting(E_ALL); // 报告所有错误
// 或
error_reporting(E_ERROR | E_WARNING | E_PARSE); // 只报告严重错误
// 设置日志记录
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/error.log');
使用 Monolog(最流行的日志库)
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\RotatingFileHandler;
// 创建日志实例
$logger = new Logger('my_logger');
// 定义日志级别
$logger->pushHandler(new StreamHandler('path/to/app.log', Logger::INFO));
$logger->pushHandler(new StreamHandler('path/to/error.log', Logger::ERROR));
// 使用不同级别记录日志
$logger->debug('调试信息');
$logger->info('用户登录成功');
$logger->notice('需要注意的信息');
$logger->warning('警告信息');
$logger->error('错误信息');
$logger->critical('严重错误');
$logger->alert('必须立即处理的错误');
$logger->emergency('系统不可用');
// 动态设置级别
$logger->setLevel(Logger::WARNING); // 只记录WARNING及以上
使用框架的内置日志系统
Laravel
// config/logging.php
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'), // 从环境变量读取
],
],
// 使用方式
use Illuminate\Support\Facades\Log;
Log::info('这是一条信息日志');
Log::warning('这是一个警告');
Log::error('这是一个错误');
ThinkPHP
// config/log.php
return [
'default' => 'file',
'channels' => [
'file' => [
'type' => 'file',
'path' => './runtime/log/',
'level' => ['error', 'warning'], // 设置日志级别
],
],
];
// 使用
\think\facade\Log::info('信息');
\think\facade\Log::error('错误');
环境变量配置方式
// .env 文件
APP_LOG_LEVEL=debug
APP_LOG_FILE=/var/log/php_app.log
// 在代码中读取
$logLevel = getenv('APP_LOG_LEVEL') ?: 'info';
$logFile = getenv('APP_LOG_FILE') ?: 'php://stderr';
// 根据环境设置日志级别
$levelMap = [
'debug' => Logger::DEBUG,
'info' => Logger::INFO,
'warning' => Logger::WARNING,
'error' => Logger::ERROR,
];
$logger->setLevel($levelMap[$logLevel] ?? Logger::INFO);
自定义简单日志类
class SimpleLogger {
private $level;
private $logFile;
const LEVELS = [
'debug' => 100,
'info' => 200,
'notice' => 250,
'warning' => 300,
'error' => 400,
'critical' => 500,
];
public function __construct($level = 'info', $logFile = 'app.log') {
$this->level = self::LEVELS[$level] ?? self::LEVELS['info'];
$this->logFile = $logFile;
}
public function log($message, $level = 'info') {
$currLevel = self::LEVELS[$level] ?? self::LEVELS['info'];
if ($currLevel >= $this->level) {
$timestamp = date('Y-m-d H:i:s');
$formattedMsg = "[$timestamp] [$level] $message\n";
file_put_contents($this->logFile, $formattedMsg, FILE_APPEND);
}
}
public function info($msg) { $this->log($msg, 'info'); }
public function error($msg) { $this->log($msg, 'error'); }
public function warning($msg) { $this->log($msg, 'warning'); }
public function debug($msg) { $this->log($msg, 'debug'); }
}
// 使用
$logger = new SimpleLogger('debug', 'myapp.log');
$logger->info('用户操作记录');
最佳实践建议
// 根据环境设置不同的日志级别
if (APP_ENV === 'production') {
// 生产环境只记录警告和错误
$logLevel = Logger::WARNING;
} elseif (APP_ENV === 'staging') {
// 预发布环境记录信息级别
$logLevel = Logger::INFO;
} else {
// 开发环境记录所有级别
$logLevel = Logger::DEBUG;
}
// 根据请求类型或用户角色调整
if ($isAdmin) {
$logLevel = Logger::DEBUG; // 管理员可以查看更多日志
}
日志级别对照表
| 级别 | 数值 | 适用场景 |
|---|---|---|
| EMERGENCY | 600 | 系统崩溃,无法使用 |
| ALERT | 550 | 必须立即处理 |
| CRITICAL | 500 | 严重错误,如数据库连接失败 |
| ERROR | 400 | 普通错误,需要记录 |
| WARNING | 300 | 警告,不影响运行 |
| NOTICE | 250 | 重要事件 |
| INFO | 200 | 常规信息 |
| DEBUG | 100 | 调试信息,开发时使用 |
选择哪种方式取决于项目规模、框架使用和实际需求,对于简单项目可使用内建函数,大型项目建议使用 Monolog 或框架自带的日志系统。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播