当前位置:首页 > 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等层级。

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');
}

上下文信息记录

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

$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');

日志清理策略

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

PHP实现日志系统

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

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

相关文章

vue实现家教系统

vue实现家教系统

Vue实现家教系统的关键步骤 项目初始化与配置 使用Vue CLI创建项目框架,安装必要依赖如Vue Router、Vuex和Axios。配置基础路由和状态管理结构,确保项目具备SPA特性。 用户认…

vue实现平台系统

vue实现平台系统

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

php实现系统开关

php实现系统开关

PHP实现系统开关的方法 数据库存储开关状态 使用数据库表存储开关状态是最常见的方式。创建一个简单的表结构: CREATE TABLE system_switches ( id INT AU…

java如何获取系统时间

java如何获取系统时间

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

java 如何记录日志

java 如何记录日志

Java 日志记录方法 Java 提供了多种日志记录框架,以下是常用的几种方法: 使用 java.util.logging (JUL) JUL 是 Java 自带的日志框架,无需额外依赖。 初始化…

uniapp新闻系统

uniapp新闻系统

开发UniApp新闻系统的基本步骤 项目初始化 使用HBuilderX创建UniApp项目,选择适合的模板。确保开发环境配置正确,包括Node.js和npm的安装。 页面结构设计 创建新闻列表页、新…