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. 平遥古城的散文
  5. 参加护理创新服务管理培训的心得体会
  6. 是物重还是人重散文
  7. 《命定的见证》读后感100字
  8. 201年公司周年庆祝福语精选
  9. AA老人手机品牌营销的策划案例
  10. 伤感个性说说201
  11. 《赵州桥》教学设计教案
  12. 新龟兔赛跑的三年级作文
  13. 2015年初一下学期期末考试语文作文
  14. 搭石公开课教案
  15. 《流鼻血了怎么办》教学设计
  16. 描写中国节日的古诗
  17. 作文:六一儿童节感想
  18. 2016工程师聘用合同范本
  19. 201年愚人节假日祝福语
  20. 关于施工责任协议书范本
  21. 五四青年节的作文00字:绽放华丽的青春
  22. 春节经典搞笑的祝福语
  23. 世界卫生日给朋友的祝福语短信
  24. 信息学院学生的自荐信范文
  25. 先进性教育活动总结
  26. 过年的手抄报
  27. 《相见欢》原文翻译及赏析
  28. 描写小草精神的诗句
  29. 关于春节的传说为话题的记事作文900字
  30. 四美犹在散文朗诵稿
  31. 《弟子规》三年级读后感
  32. 快要毕业伤感句子
  33. 初中篮球单元教学计划
  34. 一触即溃成语造句
  35. 《鸟儿乐园》教学设计
  36. 有梦想谁都了不起励志随笔
  37. 柳莺来时榴花开情感散文
  38. 劳动节小故事
  39. 过河拆桥的成语故事
  40. 关于街道计划生育办公室年度工作总结范文
网页更新时间:2026-07-09 15:23:17
本页面最近被 185 位网友访问过,最后一位访客来自 浙江,TA在页面停留了 183 分钟。
← 返回首页