口水话
TP5框架本身提供了日志类,可以自动记录系统运行日志,默认为文件方式,支持文件和socket两种方式。
默认方式下,
日志文件默认保存在 /runtime/log/中,以 201901 这样的4位年+2位月为目录名,
以日期为文件名,如 16.log,
同时,默认每个文件最大2M,超过时,自动将 16.log 重命名为 当前时间戳+日期.log,
再新生成一个 16.log 文件。
业务系统上线后,
BUG是在所难免的,
但日志文件很大很多,
要去其中排查error类型的日志,比较麻烦,
因此,有了这个方式,
将error类型的日志保存到一个数据库表中,
在需要时直接从该表中查询即可,
当然,
你也可以参照此方法,
调用其他接口,系统通知,
等等。
代码
文件 thinkphplibrarythinkLog.php
添加需要保存到数据库的日志类别
/** * @var array 需要同步记录到数据库的日志类型 */ protected static $save2dbConf = [ 'types' => ['error'] ];
添加一个静态方法
/** * 将特定类型的日志保存到数据库 */ public static function save2db($type, $msg) { if(!in_array($type, self::$save2dbConf['types'])) { return false; } defined('DATE_TIME') || define('DATE_TIME', date('Y-m-d H:i:s', time())); $header = Request::instance()->header(); $SQL = sprintf("INSERT INTO tbl_system_log(uri,client_ip,user_agent,type,content,createtime,dtime) VALUES('%s','%s','%s','%s','%s',%s,'%s')", array_key_exists('x-original-url', $header) ? $header['x-original-url'] : '', '', array_key_exists('user-agent', $header) ? $header['user-agent'] : '', $type, $msg, NOW, DATE_TIME ); Db::execute($SQL); }
在 record 和 write 方法中,添加调用新添的 save2db 方法
// 将特定类型写到 tbl_system_log self::save2db($type, $msg);
就可以了。
另外,需要在文件开头引用 Request 类,NOW 是定义为 time(),DATE_TIME 为 date('Y-m-d H:i:s', NOW),
数据库表结构也简单,照着弄就行。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。