Jadual Kandungan
1. Tentukan perisian tengah
2. Gunakan saluran log untuk menyimpan sementara log tingkah laku
Ubah suai fail konfigurasi log
2 >
Lawati mana-mana halaman projek ini, contohnya: http://www.tp6.com/ index/index/test?a=1&b=2, lihat jika fail berikut boleh dijana
1 Cipta kaedah api baharu, keperluan Tugas berjadual boleh diakses ke
Buat tugas berjadual baharu, akses berjadual langkah 1 Alamat sync_behavior_log sudah memadai, disyorkan untuk melakukannya sekali setiap 5 minit
Rumah rangka kerja php ThinkPHP Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku

Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku

May 18, 2022 am 11:50 AM
thinkphp

Artikel ini membawakan anda pengetahuan yang berkaitan tentang PHP terutamanya melihat masalah penggunaan perisian tengah untuk merekod log tingkah laku berdasarkan contoh, termasuk menggunakan saluran log untuk menyimpan log tingkah laku buat sementara waktu dan menggunakan tugas Berjadual dengan kerap menulis. log kandungan ke pangkalan data, dsb. Mari kita lihat bersama-sama saya harap ia akan membantu semua orang.

Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku

Pembelajaran yang disyorkan: "Tutorial Video PHP"

1. Tentukan perisian tengah

Ya Cepat hasilkan perisian tengah melalui arahan baris arahan

1

php think make:middleware Behavior

Salin selepas log masuk

Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku
Perintah ini akan menjana perisian tengah Gelagat di bawah direktori apl/perisian tengah. Kandungannya adalah seperti berikut:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<?phpdeclare  (strict_types = 1);namespace app\middleware;use think\facade\Log;class Behavior{

    /**

     * 处理请求

     *

     * @param \think\Request $request

     * @param \Closure       $next

     * @return Response

     */

    public function handle($request, \Closure $next)

    {

         //start 加入以下内容

         $admin  =  get_admin_info();                   //当前登录用户的信息,自己实现

         $method = strtolower($request->method());

         $is_ajax $request-&gt;isAjax();

         $route $request-&gt;pathinfo();

         $req $_REQUEST;

         unset($req['s'],$req['_session']);  

         $req_data $req ?  json_encode($req) : '';

         $data = [

               'admin_id' =&gt; $admin['id'],              //操作人id

               'admin_user' =&gt; $admin['user'],          //操作人用户名

               'route' =&gt; $route,                       //操作的路由地址

               'method' =&gt; $method,                     //get/post

               'req_tp' =&gt; $is_ajax 'ajax' 'normal',

               'req_data' =&gt; $req_data,                   //get/post的数据

               'ip' =&gt; getIp(),

               'create_time' =&gt; time()

         ];

         //end

         return $next($request);

    }}

Salin selepas log masuk

2. Gunakan saluran log untuk menyimpan sementara log tingkah laku

Ia tidak disyorkan untuk menulis log tingkah laku ke pangkalan data dalam masa nyata, yang akan menyebabkan tekanan yang tidak perlu pada pangkalan data. Mari kita tulis fail log terlebih dahulu Caching, disimpan secara kerap dalam pangkalan data
提示:先阅读官方日志处理教程 https://www.kancloud.cn/manual/thinkphp6_0/1037616
Pemprosesan log

Ubah suai fail konfigurasi log

Buka config/log.php, dalam 'channels' = > Akhir sekali tambahkan saluran berasingan untuk merekodkan log tingkah laku:

1

2

3

4

5

6

7

8

9

10

 // 其它日志通道配置

 //行为日志

 'behavior'    =&gt;    [

     'path'           =&gt; runtime_path().'behavior',  //日志存放目录

     'type'    =&gt;    'File',

     'single' =&gt;     'b',             //单一文件日志:文件名

     'file_size'    =&gt;  1024*1024*10,  //日志文件大小限制(超出会生成多个文件

     'max_files' =&gt; 30,                  //文件最大数量

     'realtime_write'    =&gt;    false,    // 关闭实时写入

 ],

Salin selepas log masuk

2 >

Buka app/middleware.php dan daftarkan Perisian tengah global log Gelagat individu

3 Uji sama ada log boleh berjaya dijana

1

2

3

4

5

6

7

8

9

<?php // 全局中间件定义文件return [

    // 全局请求缓存

    // \think\middleware\CheckRequestCache::class,

    // 多语言加载

    // \think\middleware\LoadLangPack::class,

    // Session初始化

    // \think\middleware\SessionInit::class

    // 行为日志

    \app\middleware\Behavior::class,   ];

Salin selepas log masuk

Lawati mana-mana halaman projek ini, contohnya: http://www.tp6.com/ index/index/test?a=1&b=2, lihat jika fail berikut boleh dijana


Buka fail, data telah ditulis Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku

{"time":" 2022-04-16T21:38:48 08:00","type":"info","msg":"{"admin_id ":888,"admin_user":"fanchen","route":"index/index /test","method":"get","req_tp":"normal","req_data":"{"a": "1","b":"2"}","ip":"127.0 .0.1","create_time":1650116328}"}

3 tulis kandungan log ke pangkalan data dengan kerap

1 Cipta kaedah api baharu, keperluan Tugas berjadual boleh diakses ke

2 Cipta jadual data log kelakuan baharu

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

 /**

     * 定时任务服务器定时将用户行为日志插入到数据库

     * @return void

     */

    public function sync_behavior_log()

    {

        $path = runtime_path() . 'behavior/b.log';

        $b_file file_get_contents($path);

        $b_arr explode(PHP_EOL, $b_file);

        $d = [];

        foreach ($b_arr as $b) {

            $data = json_decode($b, true);

            if (!empty($data['msg'])) {

                $d[] = json_decode($data['msg'], true);

            }

        }

        if ($d) {

            try {

                Db::name('log_behavior')-&gt;insertAll($d);     //批量插入数据库

                file_put_contents($path'');       //清空文件日志

                echo '采集用户行为日志成功' count($d);

            catch (DbException $e) {

                echo ($e-&gt;getMessage());

            }

        }

    }

Salin selepas log masuk

3. Buat tugasan berjadual baharu

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

 

-- ----------------------------

-- Table structure for log_behavior

-- ----------------------------

DROP TABLE IF EXISTS `log_behavior`;

CREATE TABLE `log_behavior`  (

  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',

  `admin_id` int(11) NOT NULL DEFAULT 0 COMMENT '用户id',

  `admin_user` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户名',

  `route` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模块名称',

  `method` enum('delete','put','post','get') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'get' COMMENT '请求方式 1get 2post 3put 4delete',

  `req_data` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '请求数据',

  `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户ip',

  `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',

  PRIMARY KEY (`id`) USING BTREE,

  INDEX `uid`(`admin_id`) USING BTREE,

  INDEX `admin_user`(`admin_user`) USING BTREE,

  INDEX `route`(`route`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 3902195 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行为日志' ROW_FORMAT = Compact;

 

SET FOREIGN_KEY_CHECKS = 1;

Salin selepas log masuk

Buat tugas berjadual baharu, akses berjadual langkah 1 Alamat sync_behavior_log sudah memadai, disyorkan untuk melakukannya sekali setiap 5 minit

Pada ketika ini, apabila pengguna mengakses, jadual data akan memasukkan data log tingkah laku secara kelompok sekali-sekala

Pembelajaran yang disyorkan: "

Tutorial video PHP

Atas ialah kandungan terperinci Contoh analisis: bagaimana thinkphp menggunakan middleware untuk merekod log tingkah laku. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Bagaimana untuk menjalankan projek thinkphp

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

Terdapat beberapa versi thinkphp

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Bagaimana untuk menjalankan thinkphp

Bagaimana untuk memasang thinkphp Bagaimana untuk memasang thinkphp Apr 09, 2024 pm 05:42 PM

Bagaimana untuk memasang thinkphp

Mana yang lebih baik, laravel atau thinkphp? Mana yang lebih baik, laravel atau thinkphp? Apr 09, 2024 pm 03:18 PM

Mana yang lebih baik, laravel atau thinkphp?

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk melaksanakan tugas tak segerak Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk melaksanakan tugas tak segerak Nov 22, 2023 pm 12:01 PM

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk melaksanakan tugas tak segerak

Penyulitan dan penyahsulitan data ThinkPHP6: melindungi keselamatan data sensitif Penyulitan dan penyahsulitan data ThinkPHP6: melindungi keselamatan data sensitif Aug 25, 2023 pm 10:52 PM

Penyulitan dan penyahsulitan data ThinkPHP6: melindungi keselamatan data sensitif

Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: merealisasikan fungsi bahagian belakang Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: merealisasikan fungsi bahagian belakang Aug 27, 2023 am 11:55 AM

Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: merealisasikan fungsi bahagian belakang

See all articles