当前位置:首页 > PHP

php代码实现日志

2026-02-15 14:47:41PHP

PHP 日志实现方法

在 PHP 中实现日志功能可以通过多种方式完成,以下是几种常见的方法:

使用内置 error_log 函数

PHP 提供了内置的 error_log 函数,可以将错误信息写入日志文件或发送到系统日志。

$message = "This is a log message";
error_log($message, 3, "/path/to/your/logfile.log");

error_log 函数的第二个参数 3 表示将消息写入文件,第三个参数指定日志文件路径。

自定义日志函数

创建一个自定义的日志函数可以更灵活地控制日志格式和行为。

function writeLog($message, $level = 'INFO') {
    $logFile = '/path/to/your/logfile.log';
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[$timestamp] [$level] $message" . PHP_EOL;

    file_put_contents($logFile, $logMessage, FILE_APPEND);
}

// 使用示例
writeLog('Application started', 'INFO');
writeLog('Invalid user input', 'WARNING');

使用 Monolog 库

Monolog 是 PHP 社区广泛使用的日志库,提供了丰富的日志处理功能。

安装 Monolog:

composer require monolog/monolog

基本使用示例:

require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// 创建日志实例
$log = new Logger('name');
$log->pushHandler(new StreamHandler('/path/to/your.log', Logger::WARNING));

// 添加日志记录
$log->warning('This is a warning');
$log->error('This is an error');

实现日志轮转

当日志文件过大时,可以实现日志轮转功能。

function rotateLogs($logFile, $maxSize = 1048576) {
    if (file_exists($logFile) && filesize($logFile) >= $maxSize) {
        $backupFile = $logFile . '.' . date('YmdHis');
        rename($logFile, $backupFile);
    }
}

// 在写入日志前调用
rotateLogs('/path/to/your/logfile.log');

日志级别管理

实现不同级别的日志记录可以帮助更好地管理日志信息。

define('LOG_LEVEL_ERROR', 1);
define('LOG_LEVEL_WARNING', 2);
define('LOG_LEVEL_INFO', 3);
define('LOG_LEVEL_DEBUG', 4);

function logMessage($message, $level = LOG_LEVEL_INFO) {
    $currentLevel = LOG_LEVEL_INFO; // 可以从配置中获取

    if ($level > $currentLevel) {
        return;
    }

    $levelMap = [
        LOG_LEVEL_ERROR => 'ERROR',
        LOG_LEVEL_WARNING => 'WARNING',
        LOG_LEVEL_INFO => 'INFO',
        LOG_LEVEL_DEBUG => 'DEBUG'
    ];

    $logLevel = $levelMap[$level] ?? 'UNKNOWN';
    writeLog($message, $logLevel);
}

数据库日志记录

将日志记录到数据库可以提供更灵活的查询和分析功能。

function logToDatabase($message, $level = 'INFO') {
    $pdo = new PDO('mysql:host=localhost;dbname=logs', 'username', 'password');
    $stmt = $pdo->prepare("INSERT INTO logs (timestamp, level, message) VALUES (NOW(), :level, :message)");
    $stmt->execute([
        ':level' => $level,
        ':message' => $message
    ]);
}

日志格式化

自定义日志格式可以使日志更易读和解析。

function formatLogMessage($message, $level, $context = []) {
    $timestamp = date('c'); // ISO 8601 格式
    $contextStr = json_encode($context);

    return sprintf(
        "[%s] [%s] %s %s%s",
        $timestamp,
        strtoupper($level),
        $message,
        $contextStr,
        PHP_EOL
    );
}

异常日志记录

专门处理异常情况的日志记录。

function logException(Exception $e) {
    $message = sprintf(
        "Exception: %s in %s on line %d",
        $e->getMessage(),
        $e->getFile(),
        $e->getLine()
    );

    writeLog($message, 'ERROR');

    // 记录堆栈跟踪
    writeLog("Stack trace:\n" . $e->getTraceAsString(), 'DEBUG');
}

这些方法可以根据具体需求进行组合和调整,构建适合项目需求的日志系统。对于大型项目,推荐使用 Monolog 这样的成熟日志库,它提供了处理器、格式化程序和日志级别管理等高级功能。

php代码实现日志

标签: 代码日志
分享给朋友:

相关文章

vue实现通讯录代码

vue实现通讯录代码

实现思路 Vue实现通讯录的核心在于数据管理和组件交互。通常需要包含联系人列表、搜索功能、分组索引以及添加/编辑功能。 基本结构 创建Vue组件时需包含以下部分: 数据模型:存储联系人数组 字…

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,包括边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin…

vue代码核心实现

vue代码核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现要点: 响应式系统 通过 Object.defineProperty(Vue 2)…

vue 实现代码

vue 实现代码

Vue 是一个流行的前端框架,用于构建用户界面。以下是一个简单的 Vue 实现代码示例,展示如何创建一个基本的 Vue 应用。 安装 Vue 通过 CDN 引入 Vue: <script s…

vue分页代码实现

vue分页代码实现

Vue 分页代码实现 在 Vue 中实现分页功能通常需要结合后端 API 返回的数据和前端的分页组件。以下是一个完整的实现示例,包括分页组件的封装和与后端数据的交互。 分页组件封装 创建一个…

vue代码实现管理

vue代码实现管理

Vue.js 管理后台实现方案 使用 Vue.js 构建管理后台系统通常涉及路由、状态管理、UI 组件库等核心模块。以下是关键实现方案: 基础框架搭建 安装 Vue CLI 创建项目: npm i…