当前位置:首页 > 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
    );
}

异常日志记录

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

php代码实现日志

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 这样的成熟日志库,它提供了处理器、格式化程序和日志级别管理等高级功能。

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

相关文章

vue实现动画代码

vue实现动画代码

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡组件、CSS 动画库集成以及第三方动画库结合。以下是几种常见实现方法: 使用 Vue 内置过渡组件 Vue 的 <tran…

vue代码框实现

vue代码框实现

Vue 代码框实现方法 在 Vue 中实现代码框功能通常需要结合语法高亮库或 UI 组件库。以下是几种常见实现方式: 使用第三方库 Prism.js 安装 Prism.js 及相关依赖: npm…

vue路由实现代码

vue路由实现代码

Vue 路由实现代码 Vue Router 是 Vue.js 的官方路由库,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现代码示例: 安装 Vue Router 通过 npm…

vue代码实现清除缓存

vue代码实现清除缓存

清除浏览器缓存的方法 在Vue项目中清除缓存通常涉及版本控制、强制刷新或服务端配置。以下是几种常见实现方式: 修改文件名添加哈希 通过webpack配置在打包时为静态文件添加哈希值,确保每次更新后文…

react代码如何优化

react代码如何优化

使用 React.memo 进行组件优化 通过 React.memo 对函数组件进行记忆化,避免不必要的重新渲染。只有当组件的 props 发生变化时才会重新渲染。 const MyCompon…

如何预览react代码

如何预览react代码

预览 React 代码的方法 本地开发环境预览 安装 Node.js 和 npm/yarn,通过 create-react-app 或 Vite 创建项目后,运行开发服务器(如 npm start)。…