当前位置:首页 > 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);
    }
}

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

相关文章

vue实现一个系统

vue实现一个系统

Vue 实现一个系统的基本步骤 项目初始化 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖如 Vue Router、Vuex/Pinia、Axios 等。选择适合的 UI 框架如 Ele…

uniapp 日志

uniapp 日志

uniapp 日志管理方法 uniapp本身没有内置日志系统,但可以通过以下方式实现日志记录功能: 使用console.log输出日志 开发阶段可以直接使用console.log()、console…

vue实现登录系统

vue实现登录系统

Vue 登录系统实现步骤 前端部分 安装依赖 确保项目已安装 Vue 3 和必要的库(如 axios、vue-router): npm install axios vue-router 路由配置 在…

vue实现平台系统

vue实现平台系统

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

vue系统怎么实现的

vue系统怎么实现的

Vue 系统的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现基于响应式数据绑定和虚拟 DOM。以下是 Vue 系统实现的关键点: 响应式系统 Vue 使用 Object.de…

vue实现滚动日志效果

vue实现滚动日志效果

实现滚动日志效果的基本思路 滚动日志效果通常指动态添加日志内容并自动滚动到底部,常见于实时日志监控或聊天界面。Vue中可通过以下方法实现: 使用v-for渲染日志列表 在Vue模板中使用v-for…