php日志实现
PHP 日志实现方法
使用内置 error_log 函数
PHP 提供了 error_log 函数用于记录日志,支持将日志写入文件或系统日志。
基本语法:
error_log(string $message, int $message_type = 0, string $destination = null, string $extra_headers = null);
示例:
error_log("This is an error message", 3, "/var/log/php_errors.log");
使用 Monolog 库
Monolog 是 PHP 生态中广泛使用的日志库,支持多种日志处理器和格式化选项。
安装 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 message');
自定义日志类
可以创建自定义日志类实现更灵活的日志记录功能。
示例代码:
class CustomLogger {
private $logFile;
public function __construct($logFile) {
$this->logFile = $logFile;
}
public function log($message, $level = 'INFO') {
$timestamp = date('Y-m-d H:i:s');
$logMessage = "[$timestamp][$level] $message" . PHP_EOL;
file_put_contents($this->logFile, $logMessage, FILE_APPEND);
}
}
$logger = new CustomLogger('/var/log/custom.log');
$logger->log('This is a custom log message');
使用框架的日志功能
主流 PHP 框架如 Laravel、Symfony 都内置了日志功能。
Laravel 示例:

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
日志轮转管理
对于长期运行的应用程序,需要考虑日志轮转以避免单个日志文件过大。
可以使用 Linux 的 logrotate 工具或实现自定义轮转逻辑:
function rotateLog($file, $maxSize = 1048576) {
if (file_exists($file) && filesize($file) >= $maxSize) {
$backup = $file . '.' . date('YmdHis');
rename($file, $backup);
}
}
日志级别设置
合理的日志级别有助于问题排查:
- DEBUG: 详细的调试信息
- INFO: 重要但非错误的运行时事件
- NOTICE: 正常但值得注意的事件
- WARNING: 非错误的异常情况
- ERROR: 需要立即调查的运行时错误
- CRITICAL: 紧急情况
- ALERT: 必须立即采取行动
- EMERGENCY: 系统不可用
性能考虑
高频日志记录可能影响性能,可以:
- 在生产环境中适当提高日志级别阈值
- 使用异步日志处理器
- 避免在循环中记录非关键日志






