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. 201年企业新年贺词祝福语
  4. 国庆节的欢乐一天初一作文
  5. 乐观心态的正能量语录
  6. 201情人节爱情经典伤感说说
  7. 《纪晓岚全传》读后感
  8. 感人周末祝福短信
  9. 201年春节祝福语大全 春节祝福语
  10. 201年新年祝福语公司
  11. 春节充满激情的祝福语大全
  12. 平安夜短信温馨贺词
  13. 与端午节有关的诗句
  14. 201年精选中考祝福语
  15. 好姐妹结婚祝福语
  16. 父母对孩子结婚的祝福语
  17. 朋友分别祝福的诗句
  18. 苏教版一年级数学上册工作总结
  19. 《南京长江大桥》教案设计
  20. 《满江红登黄鹤楼有感》古诗原文及翻译
  21. 寻杂文随笔
  22. 《酹江月·和友驿中言别》原文赏析
  23. 201清明节送给朋友的祝福语大全
  24. 201年金鸡报晓贺新春贺词
  25. 100有关清明节的故事
  26. 街道办的工业经济发展计划总结范文
  27. 乡味初一学生作文
  28. 201年元旦祝福语精选
  29. 扇形统计图教学设计范文
  30. 诗经《关雎》教学设计
  31. 毕业生个人简历范文
  32. 关于爱情的小品剧本《心与心碰触》
  33. 七夕情人节短信精选
  34. 关于冬天伤感的说说
  35. 描写春天的作文350字
  36. 60句情人节祝福语
  37. 关于新年一到十的祝福语
  38. 高一年级体育与健康的教学设计
  39. 房地产营销渠道的方式影响因素及优化策略论文
  40. 赞美桂花香的诗句
网页更新时间:2026-04-02 08:47:32
本页面最近被 704 位网友访问过,最后一位访客来自 广东,TA在页面停留了 166 分钟。
← 返回首页