thinkphp 利用中介軟體 實現日誌操作記錄
宣告,本文大部分程式碼都是參考esayadmin框架,地址:https://github.com/zhongshaofa/easyadmin
SystemLogService.php
<?php
/**
* Created by.
* User: Jim
* Date: 2020/10/16
* Time: 10:23
*/
namespace app\index\services;
use think\Db;
use think\facade\Config;
class SystemLogService
{
/**
* 例項
* @var null
*/
protected static $instance = null;
/**
* 表字首
* @var string
*/
protected $tablePrefix;
/**
* 表字尾
* @var string
*/
protected $tableSuffix;
/**
* 表名
* @var string
*/
protected $tableName;
protected function __construct()
{
$this->tablePrefix = Config::get('database.prefix');
$this->tableSuffix = date('Ym', time());
$this->tableName = "{$this->tablePrefix}system_log_{$this->tableSuffix}";
}
protected function __clone()
{
// TODO: Implement __clone() method.
}
public static function instance()
{
if (is_null(self::$instance)) {
self::$instance = new static();
}
return self::$instance;
}
public function save($data = [])
{
if (empty($data)) return false;
$this->detectTable();
Db::startTrans();
try {
Db::table($this->tableName)->insert($data);
Db::commit();
} catch (\Exception $e) {
return $e->getMessage();
}
return true;
}
protected function detectTable()
{
$check = Db::query("show tables like '{$this->tableName}'");
if (empty($check)) {
$sql = $this->getCreateSql();
Db::execute($sql);
}
return true;
}
/**
* 根據字尾獲取建立表的sql
* @return string
*/
protected function getCreateSql()
{
return <<<EOT
CREATE TABLE `{$this->tableName}` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`admin_id` int(10) unsigned DEFAULT '0' COMMENT '管理員ID',
`url` varchar(1500) NOT NULL DEFAULT '' COMMENT '操作頁面',
`method` varchar(50) NOT NULL COMMENT '請求方法',
`title` varchar(100) DEFAULT '' COMMENT '日誌標題',
`content` text NOT NULL COMMENT '內容',
`ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'IP',
`useragent` varchar(255) DEFAULT '' COMMENT 'User-Agent',
`create_time` int(10) DEFAULT NULL COMMENT '操作時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=630 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='後臺操作日誌表 - {$this->tableSuffix}';
EOT;
}
}
註冊中介軟體
建立檔案
php think make:middleware AdminAuth
程式碼:
<?php
namespace app\http\middleware;
use app\Admin\services\SystemLogService;
class AdminAuth
{
public function handle($request, \Closure $next)
{
// if (condition..) {
//
// }
$data['admin_id'] = 'admin_id';
$data['url'] = 'url';
$data['method'] = 'method';
$data['title'] = 'title';
$data['content'] = 'content';
$data['ip'] = 'ip';
$data['useragent'] = 'useragent';
$data['create_time'] = 'create_time';
SystemLogService::instance()->save($data);
return $next($request);
}
}
配置中介軟體
來到 middleware.php配置檔案中, 如果不存在,則建立
配置內容
<?php
/**
* Created by.
* User: Jim
* Date: 2020/10/16
* Time: 9:16
*/
return [
\app\http\middleware\AdminAuth::class,
];
相關文章
- laravel如何利用中介軟體優雅的記錄請求日誌Laravel
- 利用 Laravel 中介軟體給後臺加個操作日誌Laravel
- [實戰]laravel 利用trait實現中介軟體指定資料庫按月份水平分表記錄系統日誌LaravelAI資料庫
- 欄位修改記錄操作日誌的實現
- [系列] - go-gin-api 路由中介軟體 - 日誌記錄(三)GoAPI路由
- Spring Boot利用AOP獲取使用者操作實現日誌記錄Spring Boot
- ThinkPHP 中介軟體PHP
- Laravel 實現使用中介軟體記錄所有請求資訊以及日誌純 JSON 格式儲存LaravelJSON
- secureCRT記錄操作日誌Securecrt
- oracle日誌操作記錄Oracle
- 微服務體系操作日誌如何記錄?微服務
- ThinkPHP 6.0 管道模式與中介軟體的實現分析PHP模式
- Rust 實現日誌記錄功能Rust
- Appfuse:記錄操作日誌APP
- Koa日誌中介軟體封裝開發封裝
- Spring AOP 實現業務日誌記錄Spring
- Mysql之binlog日誌說明及利用binlog日誌恢復資料操作記錄MySql
- 如何優雅地記錄操作日誌?
- 如何優雅地記錄操作日誌
- 如何優雅的記錄操作日誌?
- 日誌模組(一標頭檔案就實現了日誌記錄)
- 記錄 | 實習日誌 9
- Spring boot學習(六)Spring boot實現AOP記錄操作日誌Spring Boot
- php日誌,記錄日誌PHP
- 中介軟體jboss7配置log日誌與配置
- 教你如何利用.net core實現反向代理中介軟體的方法
- 操作日誌記錄(包括輸出至自定義日誌檔案)
- PHP 框架中介軟體實現PHP框架
- Laravel 中介軟體實現原理Laravel
- Swoft AOP 記錄使用者操作日誌
- 如何記錄可讀性的操作日誌?
- 一種簡化操作日誌記錄方案
- 基於AOP和ThreadLocal實現日誌記錄thread
- 【記錄】簡單的跨域中介軟體跨域
- 使用中介軟體記錄Laravel慢請求Laravel
- Redux 中介軟體的實現原理Redux
- 介面自動化之實現日誌記錄封裝封裝
- 日誌記錄器