php代码实现日志
PHP 日志实现方法
内置 error_log 函数
PHP 提供了 error_log 函数,可将日志写入指定文件或系统日志:
error_log("Error message", 3, "/path/to/error.log");
第三个参数 3 表示写入文件,需确保目录有写入权限。
Monolog 日志库
Monolog 是 PHP 最流行的日志库,支持多处理器和格式化:
require 'vendor/autoload.php';
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');
自定义日志类

创建简单的日志类实现基础功能:
class Logger {
private $filePath;
public function __construct($filePath) {
$this->filePath = $filePath;
}
public function log($message, $level = 'INFO') {
$logEntry = date('[Y-m-d H:i:s]') . " $level: $message" . PHP_EOL;
file_put_contents($this->filePath, $logEntry, FILE_APPEND);
}
}
$logger = new Logger('/path/to/logfile.log');
$logger->log('This is an info message');
日志级别处理
实现不同级别日志记录:

define('LOG_LEVEL_ERROR', 1);
define('LOG_LEVEL_WARNING', 2);
define('LOG_LEVEL_INFO', 3);
function write_log($message, $level = LOG_LEVEL_INFO) {
$levels = [
LOG_LEVEL_ERROR => 'ERROR',
LOG_LEVEL_WARNING => 'WARNING',
LOG_LEVEL_INFO => 'INFO'
];
$logEntry = date('[Y-m-d H:i:s]') . " {$levels[$level]}: $message" . PHP_EOL;
file_put_contents('/path/to/app.log', $logEntry, FILE_APPEND);
}
日志轮转实现
处理日志文件过大问题:
function rotate_logs($filePath, $maxSize = 1048576) {
if (file_exists($filePath) && filesize($filePath) >= $maxSize) {
$backupPath = $filePath . '.' . date('YmdHis');
rename($filePath, $backupPath);
}
}
rotate_logs('/path/to/app.log');
write_log('New log entry after possible rotation');
数据库日志存储
将日志存入数据库的示例:
function log_to_db($message, $level = 'info') {
$db = new PDO('mysql:host=localhost;dbname=logs', 'user', 'pass');
$stmt = $db->prepare("INSERT INTO log_entries (level, message, created_at) VALUES (?, ?, NOW())");
$stmt->execute([$level, $message]);
}
log_to_db('Database connection established', 'info');






