tp5框架使用设计者实现日志记录功能示例
本文实例讲述了tp5框架使用设计者实现日志记录功能。分享给大家供大家参考,具体如下:
tp5实现日志记录
1.安装PSR/日志
作曲家需要PSR/日志
它的作用就是提供一套接口,实现正常的日志功能!
我们可以来细细的分析一下,LoggerInterface.php
?phpnamespace Psr \ Log/** *描述记录器实例。* *消息必须是实现__toString()的字符串或对象。* *消息可能包含表单: {foo}中的占位符,其中foo *将被关键字“foo”中的上下文数据替换。* *上下文数组可以包含任意数据。实现者可以做的唯一假设是,如果给定一个异常实例*来产生堆栈跟踪,它必须在一个名为"异常"的键中。* *完整的接口规范见https://github。com/PHP-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface。医学博士* .*/interface logger接口{/* * *系统不可用* * @ param string $ message * @ param array $ context * * @ return void */public function emergency($ message,array $ context=array());/** *必须立即采取行动。* *示例:整个网站瘫痪、数据库不可用等。这应该会触发短信提醒并唤醒你* * @ param string $ message * @ param array $ context * * @ return void */public function alert($ message,array $ context=array());/** *临界条件。* *示例:应用程序组件不可用,意外异常* * @ param string $ message * @ param array $ context * * @ return void */public function critical($ message,array $ context=array());/** *运行时错误不需要立即采取措施,但通常应*记录和监控* * @ param string $ message * @ param array $ context * * @ return void */public function error($ message,array $ context=array());/** *非错误的异常事件。* *示例:不推荐使用的应用编程接口的使用,应用编程接口的不良使用,不可取的事情*不一定是错误的* * @ param string $ message * @ param array $ context * * @ return void */public function warning($ message,array $ context=array());/** *正常但重大的事件* * @ param string $ message * @ param array $ context * * @ return void */public function notice($ message,array $ context=array());/** *有趣的事件。* *示例:用户登录,SQL日志* * @ param string $ message * @ param array $ context * * @ return void */public function info($ message,array $ context=array());/** *详细的调试信息* * @ param string $ message * @ param array $ context * * @ return void */public function debug($ message,array $ context=array());/** *任意级别的日志* * @ param mixed $ level * @ param string $message * @ param array $ context * * @ return void */public function log($ level,$ message,array $ context=array());}这是一套日志正常的接口,有层级,有消息,有具体的内容。
LogLevel.php
?phpnamespace Psr \ Log/** *描述日志级别*/class LogLevel { const EMERGENCY=' EMERGENCY ';const ALTER=' ALERT const CRITICAL=' CRITICAL const ERROR=' ERROR const WARNING=' WARNING const NOTICE=' NOTICE const INFO=' INFO const DEBUG=' DEBUG }定义一些错误常量。
AbstractLogger.php实现接口
?phpnamespace Psr \ Log/** *这是一个简单的记录器实现,其他记录器可以继承它。* *它只是将所有特定于日志级别的方法委托给"日志"方法,以*减少一个简单的记录器必须实现的样板代码,该记录器无论错误级别如何,都会对*消息执行相同的操作。*/抽象类抽象记录器实现了LoggerInterface{ /** *系统不可用* * @ param string $message * @ param array $ context * * @ return void */public function emergency($ message,array $ context=array()){ $ this-log(log level :3360 emergency,$ message,$ context);} /** *必须立即采取行动。* *示例:整个网站瘫痪、数据库不可用等。这应该会触发短信提醒并唤醒你* * @ param string $message * @ param array $ context * * @ return void */public function alert($ message,array $ context=array()){ $ this-log(log level :3360 alert,$ message,$ context);} /** *临界条件。* *示例:应用程序组件不可用,意外异常* * @ param string $message * @ param array $ context * * @ return void */public function critical($ message,array $ context=array()){ $ this-log(log level :3360 critical,$ message,$ context);} /** *运行时错误不需要立即采取措施,但通常应*记录和监控* * @ param string $message * @ param array $ context * * @ return void */public function error($ message,array $ context=array()){ $ this-log(log level :3360 error,$ message,$ context);} /** *非错误的异常事件。* *示例:不推荐使用的应用编程接口的使用,应用编程接口的不良使用,不可取的事情*不一定是错误的* * @ param string $message * @ param array $ context * * @ return void */public function warning($ message,array $ context=array()){ $ this-log(log level :3360 warning,$ message,$ context);} /** *正常但重大的事件* * @ param string $message * @ param array $ context * * @ return void */public function notice($ message,array $ context=array()){ $ this-log(log level :3360 notice,$ message,$ context);} /** *有趣的事件。* *示例:用户登录,SQL日志* * @ param string $message * @ param array $ context * * @ return void */public function info($ message,array $ context=array()){ $ this-log(log level :3360 info,$ message,$ context);} /** *详细的调试信息* * @ param string $message * @ param array $ context * * @ return void */public function debug($ message,array $ context=array()){ $ this-log(log level :3360 debug,$ message,$ context);}}Logger.php继承AbstractLogger.php
?phpnamespace Psr \ Log使用app \ index \ model \ LogModel/** *此记录器可用于避免条件日志调用。* *日志记录应该始终是可选的,如果没有为您的*库提供日志记录程序,创建一个空日志记录程序实例来处理日志是一个很好的方法,可以避免在代码中乱丢" if ($this-logger) { }` *块*/类记录器用任意级别扩展了抽象日志记录程序{/* * *日志.* * @ param mixed $ level * @ param string $message * @ param array $ context * * @ return void */public function log($ level,$ message,array $ context=array()){//noop $ logModel=new logModel();$logModel-add($level,$message,JSON _ encode($ context));echo $ LogMoDEL-id;}}这里面的原木方法是我自己写的!
我们需要把日志存储到数据库中!
这里我设计了一个原木表,包含身份证、级别、消息、上下文、ip、url、创建时间等。
我创建了一个LogModel.php
?PHP/* * * @作者: Jim * @日期: 2017/11/16 */命名空间app \ index \ model使用思考\模型;/***类LogModel * @包app \索引\模型* *继承模型之后,就可以使用继承它的属性和方法* */类日志模型扩展了模型{受保护$ pk=' id//配置主键受保护的$ table=" log//默认的表名是日志模型公共函数添加($level='error ',$message='出错啦,$ context=' '){ $ this-data([' level '=$ level,' message'=$message,' context'=$context,' ip'=getIp(),' url'=getUrl(),' create _ on '=date(' Y-m-d h : I 3360s ',time()))))]);$ this-save();返回$ this-id;}}一切都准备好了,可以在控制器中使用了!
?phpnamespace应用程序\索引\控制器;使用思考\控制器;使用日志记录器类索引扩展了控制器{公共函数Index(){ $ Logger=new Logger();$context=数组();$context['err']='缺少参数' id ';$logger-info('有新消息');} public function _ empty(){ 0返回“空的”;} }
小结:
设计者很好很强大!
这里是接口连接的典型案例,定义接口,定义抽象类,定义具体类。
有了命名空间,可以很好的引用不同文件夹下的库!
互相使用,能够防止高内聚!即便是耦合也相对比较独立!
有了这个日志小工具,平时接口的一些报错信息就能很好的捕捉了!
只要
使用日志记录器然后
$ Logger=new Logger();$logger-info('info信息');使用非常方便!
附上获取知识产权、获取全球资源定位器(统一资源定位符)的方法。
//获取用户真实IPfunction GetIP(){ if(getenv(' HTTP _ CLIENT _ IP ')str secmp(getenv(' HTTP _ CLIENT _ IP ','未知)$ IP=getenv(' HTTP _ CLIENT _ IP ');else if(getenv(' HTTP _ X _ FORWARDED _ FOR ')str secmp(getenv(' HTTP _ X _ FORWARDED _ FOR '),'未知')$ IP=getenv(' HTTP _ X _ FORWARDED _ FOR ');else if(getenv(' REMOTE _ ADDR ')str secmp(getenv(' REMOTE _ ADDR ','未知)$ IP=getenv(' REMOTE _ ADDR ');else if(isset($ _ SERVER[' REMOTE _ ADDR '])$ _ SERVER[' REMOTE _ ADDR ']str secmp($ _ SERVER[' REMOTE _ ADDR '],'未知)$ IP=$ _ SERVER[' REMOTE _ ADDR '];else $ip='未知;退货($ IP);}//获取函数GetURl(){ return ' http://' .$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$ _ SERVER[' REQUEST _ URI '];}更多关于框架相关内容感兴趣的读者可查看本站专题: 《ThinkPHP入门教程》 、 《thinkPHP模板操作技巧总结》 、 《ThinkPHP常用方法总结》 、 《codeigniter入门教程》 、 《CI(CodeIgniter)框架进阶教程》 、 《Zend FrameWork框架入门教程》 及《PHP模板技术总结》 。
希望本文所述对大家基于ThinkPHP框架的服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。
版权声明:tp5框架使用设计者实现日志记录功能示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。