• 0
  • 0

DZ添加数据库报错日志

2021-05-29 731 0 admin 所属分类:Discuz

DZ 自己有一套数据库报错拦截机制。

遵循只添加不修改的操作,我们仅在 discuz_error.php 文件中 添加回调拦截。通过在全局数据中传入回调函数,支持回调给多个注册方记录。

myhook(['_discuz_error' => 'system', 'message' => "{$message}\nPHP:{$logtrace}"]);

然后在你的入口处注册 myhook回调 这样就可以在数据库报错之前记录相关信息 便于后期拍错

数据库结构

CREATE TABLE `logs`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `domain` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '请求域名',
  `ip` varchar(23) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '请求IP地址',
  `action` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '行为',
  `data` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '请求数据 ',
  `headers` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '请求头',
  `message` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '错误信息',
  `user_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '报错用户',
  `created_at` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '入库时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `user_id`(`user_id`) USING BTREE,
  INDEX `domain`(`domain`) USING BTREE,
  INDEX `created_at`(`created_at`) USING BTREE,
  INDEX `ip`(`ip`) USING BTREE
)  COMMENT = '报错信息日志记录' ;

PHP入库代码

C::t(PT_ERROR)->add([
			'action'     => INIT_GATE."/$mod/$ac",
			'domain'     => $_SERVER['HTTP_HOST'],
			'ip'         => ip(),
			'data'       => json_encode($_GET, JSON_UNESCAPED_UNICODE),
			'headers'    => json_encode(getallheaders(), JSON_UNESCAPED_UNICODE),
			'user_id'    => $_USER['uid'],
			'message'    => json_encode($params, JSON_UNESCAPED_UNICODE),
			'created_at' => TIMESTAMP
		]);


返回顶部