# php高性能多存储日志类 **Repository Path**: web/phplog ## Basic Information - **Project Name**: php高性能多存储日志类 - **Description**: 一个功能强大的PHP日志系统,支持多种存储方式,具有自动清理、分表规则、大并发优化等特性。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 日志系统 一个功能强大的PHP日志系统,支持多种存储方式,具有自动清理、分表规则、大并发优化等特性。 ## 功能特性 - **多存储支持**:支持MySQL、SQLite和文件存储 - **日志保留管理**:可设置日志保留天数,0表示关闭自动清理 - **自动清理机制**:过期日志自动清除,采用分批删除避免程序死机 - **文件存储结构**:按月份创建目录,按日期命名文件 - **分表规则**:支持按年、按月、按日分表 - **大并发优化**:实现批量插入机制,提高写入性能 - **自定义内容**:支持添加自定义上下文信息 - **完整日志内容**:确保日志结束内容完整 ## 系统要求 - PHP 5.6+ - PDO扩展(用于MySQL和SQLite存储) - MySQL或SQLite(可选,用于对应存储方式) ## 安装方法 1. 下载或克隆代码到项目目录 2. 引入 `Logger.php` 文件到您的项目中 ## 使用示例 ### 1. 文件存储 ```php // 引入日志类 require_once 'Logger.php'; // 创建日志实例 $logger = new Logger([ 'storage' => 'file', 'file_path' => './logs', // 日志存储路径 'keep_days' => 7 // 日志保留7天 ]); // 记录不同级别的日志 $logger->debug('调试信息', ['user_id' => 1, 'action' => 'login']); $logger->info('普通信息', ['page' => 'index', 'ip' => '127.0.0.1']); $logger->warning('警告信息', ['module' => 'payment', 'amount' => 100]); $logger->error('错误信息', ['error' => 'Database connection failed']); $logger->fatal('致命错误', ['error' => 'System crash']); // 手动刷新(可选,析构函数会自动调用) $logger->flush(); ``` ### 2. SQLite存储 ```php // 创建SQLite日志实例 $logger = new Logger([ 'storage' => 'sqlite', 'sqlite_path' => './logs.db', // SQLite文件路径 'table_prefix' => 'log_', // 表前缀 'table_rule' => 'month', // 分表规则:year/month/day 'keep_days' => 30 // 日志保留30天 ]); // 记录日志 $logger->info('SQLite测试日志', ['test' => 'success']); ``` ### 3. MySQL存储 ```php // 创建MySQL日志实例 $logger = new Logger([ 'storage' => 'mysql', 'host' => 'localhost', // MySQL主机 'port' => 3306, // MySQL端口 'username' => 'root', // MySQL用户名 'password' => '', // MySQL密码 'database' => 'log', // MySQL数据库 'table_prefix' => 'log_', // 表前缀 'table_rule' => 'month', // 分表规则:year/month/day 'keep_days' => 60 // 日志保留60天 ]); // 记录日志 $logger->info('MySQL测试日志', ['test' => 'success']); ``` ## 配置选项 | 选项 | 类型 | 默认值 | 说明 | |------|------|--------|------| | storage | string | 'file' | 存储类型:file/mysql/sqlite | | host | string | 'localhost' | MySQL主机 | | port | int | 3306 | MySQL端口 | | username | string | 'root' | MySQL用户名 | | password | string | '' | MySQL密码 | | database | string | 'log' | MySQL数据库 | | sqlite_path | string | './logs.db' | SQLite文件路径 | | file_path | string | './logs' | 文件存储路径 | | table_prefix | string | 'log_' | 表前缀 | | table_rule | string | 'month' | 分表规则:year/month/day | | keep_days | int | 30 | 日志保留天数,0表示关闭自动清理 | | batch_size | int | 100 | 批量插入大小 | | max_delete_count | int | 1000 | 单次最大删除数量 | ## 方法说明 ### 日志记录方法 - `log($level, $message, $context = [])` - 通用日志记录方法 - `debug($message, $context = [])` - 记录调试日志 - `info($message, $context = [])` - 记录信息日志 - `warning($message, $context = [])` - 记录警告日志 - `error($message, $context = [])` - 记录错误日志 - `fatal($message, $context = [])` - 记录致命错误日志 ### 其他方法 - `flush()` - 手动刷新日志队列 - `cleanExpiredLogs()` - 手动清理过期日志 ## 性能优化 1. **批量写入**:使用 `batch_size` 配置批量插入日志,减少I/O操作 2. **缓存机制**:对表名、文件路径等进行缓存,减少重复计算 3. **分批删除**:清理日志时采用分批删除,避免删除过多引起程序死机 4. **智能判断**:根据表名规则判断是否需要清理,减少不必要的数据库操作 ## 运行演示 运行 `demo.php` 文件查看完整的功能演示: ```bash php demo.php ``` ## 存储结构 ### 文件存储 ``` logs/ ├── 2026_03/ # 月份目录 │ ├── 01.log # 日期文件 │ ├── 02.log │ └── ... └── 2026_04/ └── ... ``` ### 数据库存储 - **按年分表**:`log_2026` - **按月分表**:`log_2026_03` - **按日分表**:`log_2026_03_23` ## 注意事项 1. 使用MySQL存储时,请确保数据库已创建,并且用户有足够的权限 2. 使用文件存储时,请确保目录有写入权限 3. 建议根据实际需求调整 `batch_size` 和 `max_delete_count` 参数 4. 对于高并发场景,建议使用文件存储或SQLite存储 ## 许可证 本项目采用MIT许可证。