当前位置:首页 > PHP

php实现操作日志

2026-02-16 11:08:01PHP

PHP 实现操作日志的方法

数据库表设计

创建一个专门存储操作日志的数据库表,字段通常包括日志ID、操作类型、操作内容、操作用户、操作时间等。示例SQL:

CREATE TABLE `operation_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '操作用户ID',
  `action` varchar(50) NOT NULL COMMENT '操作类型',
  `content` text COMMENT '操作内容',
  `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

日志记录类封装

创建一个独立的日志记录类,封装日志写入逻辑:

class OperationLogger {
    private $db;

    public function __construct($dbConnection) {
        $this->db = $dbConnection;
    }

    public function log($userId, $action, $content = '') {
        $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $stmt = $this->db->prepare("INSERT INTO operation_logs (user_id, action, content, ip_address) VALUES (?, ?, ?, ?)");
        $stmt->execute([$userId, $action, $content, $ip]);
        return $this->db->lastInsertId();
    }
}

中间件实现

在框架中使用中间件自动记录请求日志:

class LogOperationMiddleware {
    protected $logger;

    public function __construct(OperationLogger $logger) {
        $this->logger = $logger;
    }

    public function handle($request, $next) {
        $response = $next($request);

        if (auth()->check()) {
            $this->logger->log(
                auth()->id(),
                $request->method(),
                $request->fullUrl()
            );
        }

        return $response;
    }
}

文件日志备份

同时将关键操作记录到文件作为备份:

function logToFile($message) {
    $logFile = __DIR__.'/logs/operation_'.date('Y-m-d').'.log';
    $logMessage = '['.date('Y-m-d H:i:s').'] '.$message.PHP_EOL;
    file_put_contents($logFile, $logMessage, FILE_APPEND);
}

日志查询接口

提供日志查询功能:

class LogController {
    public function index(Request $request) {
        $query = OperationLog::query();

        if ($request->has('user_id')) {
            $query->where('user_id', $request->input('user_id'));
        }

        if ($request->has('action')) {
            $query->where('action', 'like', '%'.$request->input('action').'%');
        }

        return $query->orderBy('created_at', 'desc')->paginate(20);
    }
}

安全注意事项

敏感操作应记录更详细的信息,但避免直接记录密码等敏感数据。对于高安全要求的系统,可以考虑使用单向哈希处理部分日志内容。

php实现操作日志

标签: 操作日志
分享给朋友:

相关文章

vue 实现选题操作

vue 实现选题操作

实现选题操作的基本思路 在Vue中实现选题操作通常涉及数据绑定、事件处理和状态管理。通过v-model或自定义事件实现选项的选择与反选,结合计算属性或方法动态更新选中状态。 单选功能实现 使用v-m…

vue操作日志实现

vue操作日志实现

Vue 操作日志实现方案 方案一:基于拦截器的前端日志记录 通过封装 Axios 请求拦截器和响应拦截器,自动记录用户操作。这种方式适合记录 API 调用相关的操作。 // 在 axios 拦…

vue实现操作权限

vue实现操作权限

Vue 实现操作权限的方法 使用自定义指令 在 Vue 中可以通过自定义指令来实现操作权限控制。创建一个指令,检查用户是否有权限执行某个操作。 // 注册全局指令 Vue.directive('p…

vue操作权限实现

vue操作权限实现

Vue 权限控制实现方案 Vue 中实现权限控制通常涉及前端路由、按钮/组件级权限、接口权限等多个层面。以下是常见的实现方法: 路由权限控制 通过动态路由实现,根据用户权限过滤可访问的路由: 定…

vue实现滚动日志效果

vue实现滚动日志效果

实现滚动日志效果的基本思路 滚动日志效果通常指动态添加日志内容并自动滚动到底部,常见于实时日志监控或聊天界面。Vue中可通过以下方法实现: 使用v-for渲染日志列表 在Vue模板中使用v-for…

vue实现解析日志功能

vue实现解析日志功能

解析日志功能的实现方法 在Vue中实现日志解析功能,通常需要结合文件处理、文本解析和可视化展示。以下是几种常见实现方式: 文件上传与读取 使用HTML5的File API实现日志文件上传: &…