PHP连接MySQL的日志记录方法?

发布时间: 2025-07-11 19:13:16

# PHP连接MySQL的日志记录方法详解

在PHP应用中,与MySQL数据库的交互是核心功能之一。为了确保系统的稳定性和便于故障排查,记录MySQL连接和操作日志显得尤为重要。本文将详细介绍几种PHP连接MySQL时的日志记录方法。

## 1. 使用PHP内置错误日志

最简单的方法是利用PHP的错误日志功能记录MySQL连接问题:

```php

<?php

// 配置错误日志

ini_set('log_errors', 1);

ini_set('error_log', '/var/log/php_mysql_errors.log');

// 尝试连接MySQL

$conn = new mysqli('localhost', 'username', 'password', 'database');

// 检查连接错误

if ($conn->connect_error) {

error_log("MySQL连接失败: " . $conn->connect_error);

die("连接失败: " . $conn->connect_error);

}

// 记录查询日志

function logQuery($query, $startTime) {

$duration = microtime(true) - $startTime;

error_log(sprintf("查询执行: %s (耗时: %.4f秒)", $query, $duration));

}

$startTime = microtime(true);

$result = $conn->query("SELECT * FROM users");

logQuery("SELECT * FROM users", $startTime);

?>

```

## 2. 使用MySQL通用查询日志

MySQL服务器本身提供了强大的日志功能,可以在MySQL配置文件中启用:

```

# my.cnf 或 my.ini 配置文件

[mysqld]

general_log = 1

general_log_file = /var/log/mysql/mysql-general.log

log_output = FILE

```

这种方法会记录所有发送到MySQL服务器的查询,包括连接信息,但会产生大量日志数据。

## 3. 创建自定义日志类

对于更精细的控制,可以创建专门的日志类:

```php

class MySQLLogger {

private $logFile;

public function __construct($logFile = '/var/log/mysql_operations.log') {

$this->logFile = $logFile;

}

public function logConnection($host, $user, $success, $error = '') {

$message = sprintf(

"[%s] 连接MySQL - 主机: %s, 用户: %s, 状态: %s%s",

date('Y-m-d H:i:s'),

$host,

$user,

$success ? '成功' : '失败',

$error ? ", 错误: $error" : ''

);

file_put_contents($this->logFile, $message . PHP_EOL, FILE_APPEND);

}

public function logQuery($query, $duration, $rowsAffected = 0) {

$message = sprintf(

"[%s] 查询执行 - 耗时: %.4f秒, 影响行数: %d, 查询: %s",

date('Y-m-d H:i:s'),

$duration,

$rowsAffected,

trim(preg_replace('/\s+/', ' ', $query))

);

file_put_contents($this->logFile, $message . PHP_EOL, FILE_APPEND);

}

}

// 使用示例

$logger = new MySQLLogger();

try {

$conn = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');

$logger->logConnection('localhost', 'user', true);

$startTime = microtime(true);

$stmt = $conn->query("SELECT * FROM products");

$logger->logQuery(

"SELECT * FROM products",

microtime(true) - $startTime,

$stmt->rowCount()

);

} catch (PDOException $e) {

$logger->logConnection('localhost', 'user', false, $e->getMessage());

}

```

## 4. 使用Monolog等日志库

对于大型应用,推荐使用专业的日志库如Monolog:

```php

require 'vendor/autoload.php';

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

// 创建日志通道

$logger = new Logger('mysql');

$logger->pushHandler(new StreamHandler('/var/log/mysql_app.log', Logger::DEBUG));

try {

$pdo = new PDO('mysql:host=db;dbname=test', 'user', 'pass');

$logger->info('MySQL连接成功', [

'host' => 'db',

'user' => 'user'

]);

$start = microtime(true);

$stmt = $pdo->prepare("INSERT INTO logs (message) VALUES (:message)");

$stmt->execute([':message' => '测试日志']);

$logger->debug('查询执行完成', [

'query' => "INSERT INTO logs (message) VALUES (?)",

'params' => ['测试日志'],

'duration' => microtime(true) - $start,

'affected_rows' => $stmt->rowCount()

]);

} catch (PDOException $e) {

$logger->error('MySQL连接失败', [

'exception' => $e->getMessage(),

'host' => 'db',

'user' => 'user'

]);

}

```

## 5. 慢查询日志

除了常规日志,记录慢查询对性能优化很有帮助:

```php

// 在MySQL连接后设置慢查询阈值(秒)

$conn->query("SET SESSION long_query_time = 1");

$conn->query("SET GLOBAL slow_query_log = 'ON'");

$conn->query("SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log'");

$conn->query("SET GLOBAL log_queries_not_using_indexes = 'ON'");

```

## 最佳实践建议

1. **敏感信息处理**:避免在日志中记录完整的密码或敏感数据

2. **日志轮转**:配置日志轮转防止日志文件过大

3. **分级日志**:使用DEBUG、INFO、WARNING、ERROR等级别

4. **上下文信息**:记录足够的上下文信息便于排查问题

5. **性能考虑**:高频日志记录可能影响性能,生产环境需权衡

通过以上方法,您可以有效地记录PHP与MySQL交互过程中的各种事件,为系统维护和问题排查提供有力支持。

转载请注明出处:http://www.17can.com/articles/4516.html

热门阅读

  1. 中考语文作文优秀排比句积累汇总
  2. 小猪与老鼠的睡前故事
  3. 政务中心窗口承诺书范文
  4. NPI工程师个人简历
  5. 关于《威尼斯的小艇》的第二课时教学设计
  6. 关于美好的句子
  7. 描写秋天的优美句子精选
  8. 有限责任公司增资入股的协议书
  9. 《家的n次方》语录
  10. 冒险的句子
  11. 201年植树节搞笑短信祝福语
  12. 教师节赞美老师的句子大全
  13. 幼儿园大班语言活动《月亮船》教学设计
  14. 大学情景剧剧本
  15. 关于寓言故事成语
  16. 中医院校诊断学基础检体诊断实验课教学探索与体论文
  17. 霜降祝福语大全
  18. 高考百日誓师口号有哪些
  19. 爱吹牛的乌鸦睡前故事
  20. 发挥搜索引擎优化在网络营销中的作用论文
  21. 计算机教师工作总结发言
  22. 关于201年男生暑假减肥计划
  23. 卫生院办公室年度工作总结范文
  24. 大学教务处工作计划
  25. 班主任的辞职报告
  26. 荷塘月色教案职高
  27. 关于泪划过你的心的心情随笔
  28. 美丽的红岩作文600字
  29. 实验小学课改的工作总结
  30. 圣诞树作文
  31. 201年迎接中考的祝福语
  32. 五一国际劳动节的祝福短信
  33. 关于过年的手抄报内容和相关资料
  34. 201年鸡年物流公司新春贺词
  35. 三年级话题作文:精彩的春节联欢晚会
  36. 高一周记优秀作文
  37. 烟雨桂林3000字作文
  38. 劳务承包协议的范文
  39. 教师贺卡祝福语大全
  40. 我的好老师作文00字
网页更新时间:2026-10-08 00:57:30
本页面最近被 655 位网友访问过,最后一位访客来自 西藏,TA在页面停留了 76 分钟。
← 返回首页