当前位置:首页 > PHP

PHP实现日志系统

2026-02-15 15:29:51PHP

文件日志记录

使用PHP内置的error_log函数将日志写入文件。配置php.ini中的error_log参数指定日志文件路径,或直接在代码中动态设置。

$message = "用户登录失败,用户名:admin";
error_log(date('[Y-m-d H:i:s]') . " " . $message . "\n", 3, "/var/log/myapp.log");

数据库日志存储

创建专门的日志表结构,通过PDO或MySQLi实现数据库写入。适合需要复杂查询和分析的场景。

$pdo = new PDO('mysql:host=localhost;dbname=logs', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO system_logs (level, message, context, created_at) VALUES (?, ?, ?, ?)");
$stmt->execute([
    'WARNING',
    '数据库连接超时',
    json_encode(['ip' => $_SERVER['REMOTE_ADDR']]),
    date('Y-m-d H:i:s')
]);

Monolog组件集成

通过Composer安装Monolog库实现专业级日志管理,支持多处理器和格式化。

composer require monolog/monolog
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('app');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
$log->warning('支付验证失败', ['order_id' => 12345]);

日志分级处理

实现不同严重级别的日志分类,通常包含DEBUG、INFO、NOTICE、WARNING等层级。

PHP实现日志系统

const LOG_LEVELS = [
    'DEBUG' => 0,
    'INFO' => 1,
    'ERROR' => 2
];

function writeLog($message, $level = 'INFO') {
    if (LOG_LEVELS[$level] >= LOG_LEVELS['INFO']) {
        file_put_contents('app.log', "[$level] $message\n", FILE_APPEND);
    }
}

日志轮转机制

处理日志文件过大问题,可以按日期或大小分割日志文件。

$logFile = 'app_' . date('Y-m-d') . '.log';
if (filesize($logFile) > 1024 * 1024) {
    rename($logFile, 'app_' . date('Y-m-d_His') . '.log');
}

上下文信息记录

在日志中附加请求上下文,便于问题追踪。

PHP实现日志系统

$context = [
    'ip' => $_SERVER['REMOTE_ADDR'],
    'user_agent' => $_SERVER['HTTP_USER_AGENT'],
    'request_uri' => $_SERVER['REQUEST_URI']
];
error_log(json_encode($context), 3, 'context.log');

日志报警机制

当日志达到特定级别时触发邮件或短信通知。

if (strpos($logEntry, 'CRITICAL') !== false) {
    mail('admin@example.com', '系统告警', $logEntry);
}

性能日志记录

专门记录执行时间和内存消耗等性能指标。

$start = microtime(true);
// 业务代码执行
$elapsed = round((microtime(true) - $start) * 1000, 2);
error_log("SQL查询耗时:{$elapsed}ms", 3, 'performance.log');

日志清理策略

设置自动清理过期日志的机制,避免磁盘空间耗尽。

foreach (glob('/var/log/app/*.log') as $file) {
    if (filemtime($file) < strtotime('-30 days')) {
        unlink($file);
    }
}

标签: 系统日志
分享给朋友:

相关文章

java如何获取系统时间

java如何获取系统时间

获取系统时间的方法 在Java中,获取系统时间有多种方法,以下是几种常用的方式: 使用System.currentTimeMillis() long currentTimeMillis = Sys…

vue实现平台系统

vue实现平台系统

Vue 实现平台系统的方法 项目初始化与配置 使用 Vue CLI 或 Vite 初始化项目,推荐 Vue 3 + TypeScript 组合。安装核心依赖: npm create vue@late…

php实现日志

php实现日志

PHP 实现日志功能的方法 使用内置函数 error_log() PHP 提供了 error_log() 函数,可以直接将日志写入文件或系统日志中。error_log("Error message"…

php实现叫号系统

php实现叫号系统

实现叫号系统的基本思路 叫号系统通常用于医院、银行、政务大厅等场所,核心功能包括取号、叫号、显示当前号码和排队情况。PHP作为后端语言,可结合MySQL数据库和前端技术实现。 数据库设计 创建基本表…

java如何获取系统时间

java如何获取系统时间

获取当前系统时间的方法 在Java中获取系统时间有多种方式,以下列举几种常用方法: 使用 java.util.Date 类 Date currentDate = new Date(); System…

java如何记录日志

java如何记录日志

Java 日志记录方法 Java 提供了多种日志记录框架和工具,以下是常见的几种方法: 使用 java.util.logging (JUL) Java 标准库自带的日志框架,无需额外依赖: imp…