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. 201年祝福新婚快乐的祝福语大全
  5. 大学毕业自荐信范文
  6. 《故乡的榕树》第一课时教学设计模板
  7. 秋分古诗赏析 描写秋分的古诗有哪些?
  8. 201年给高三考生加油的祝福语
  9. 谈商业地产营销策划策略论文
  10. 2018年青年节公司祝福短信大全
  11. 201年51劳动节给同事祝福语大全
  12. 有关有创意的祝福短信
  13. 电视台广告中心寒假实习报告范文
  14. 满江红诗词赏析
  15. 《流域的治理与开发—以美国田纳西河为例》优秀教学设计
网页更新时间:2026-08-23 09:22:11
本页面最近被 388 位网友访问过,最后一位访客来自 黑龙江,TA在页面停留了 151 分钟。
← 返回首页