首页 > 作文

tp5框架使用composer实现日志记录功能示例

更新时间:2023-04-06 16:33:15 阅读: 评论:0

本文实例讲述了tp5框架使用compor实现日志记录功能。分享给大家供大家参考,具体如下:

tp5实现日志记录

1.安装 psr/log

compor require psr/log

它的作用就是提供一套接口,实现正常的日志功能!

我们可以来细细的分析一下,loggerinterface.php

<?phpnamespace psr\log;/** * describes a logger instance. * * the message must be a string or object implementing __tostring(). * * the message may contain placeholders in the form: {foo} where foo * will be replaced by the context data in key "foo". * * the context array can contain arbitrary data. the only assumption that * can be made by implementors is that if an exception instance is given * to produce a stack trace, it must be in a key named "exception". * * e https://github.com/php-fig/fig-standards/blob/master/accepted/psr-3-logger-interface.md * for the full interface specification. */interface loggerinterface{  /**   * system is unusable.   *   * @param string $message   * @param array $context   *   * @return void   */  public function emergency($message, array $context = array());  /**   * action must be taken immediately.   *   * example: entire website down, databa unavailable, etc. this should   * trigger the sms alerts and wake you up.   *   * @param string $message   * @param array $context   *   * @return void   */  public function alert($message, array $context = array());  /**   * critical conditions.   *   * example: application component unavailable, unexpected exception.   *   * @param string $message   * @param array $context   *   * @return void   */  public function critical($message, array $context = array());  /**   * runtime errors that do not require immediate action but should typically   * be logged and monitored.   *   * @param string $message   * @param array $context   *   * @return void   */  public function error($message, array $context = array());  /**   * exceptional occurrences that are not errors.   *   * example: u of deprecated apis, poor u of an api, undesirable things   * that are not necessarily wrong.   *   * @param string $message   * @param array $context   *   * @return void   */  public function warning($message, array $context = array());  /**   * normal but significant events.   *   * @param string $message   * @param array $context   *   * @return void   */  public function notice($message, array $context = array());  /**   * interesting events.   *   * example: ur logs in, sql logs.   *   * @param string $message   * @param array $context   *   * @return void   */  public function info($message, array $context = array());  /**   * detailed debug information.   *   * @param string $message   * @param array $context   *   * @return void   */  public function debug($message, array $context = array());  /**   * logs with an arbitrary level.   *   * @param mixed $level   * @param string $message   * @param array $context   *   * @return void   */  public function log($level, $message, array $context = array());}

这是一套日志正常的接口,有层级,有消息,有具体的内容。

loglevel.php

<?phpnamespace psr\log;/** * describes log levels. */class loglevel{  const emergency = 'emergency';  const alert   = 'alert';  const critical = 'critical';  const error   = 'error';  const warning  = 'warning';  const notice  = 'notice';  const info   = 'info';  const debug   = 'debug';}

定义一些错误常量。

abstractlogger.php实现接口

<?phpnamespace psr\log;/** * this is a simple logger implementation that other loggers can inherit from. * * it simply delegates all log-level-specific methods to the `log` method to * reduce boilerplate code that a simple logger that does the same thing with * messages regardless of the error level has to implement. */abstract class abstractlogger implements loggerinterface{  /**   * system is unusable.   *   * @param string $message   * @param array $context   *   * @return void   */  public function emergency($message, array $context = array())  {    $this->log(loglevel::emergency, $message, $context);  }  /**   * action must be taken immediately.   *   * example: entire website down, databa unavailable, etc. this should   * trigger the sms alerts and wake you up.   *   * @param string $message   * @param array $context   *   * @return void   */  public function alert($message, array $context = array())  {    $this->log(loglevel::alert, $message, $context);  }  /**   * critical conditions.   *   * example: application component unavailable, unexpected exception.   *   * @param string $message   * @param array $context   *   * @return void   */  public function critical($message, array $context = array()电梯打一成语)  {    $this->log(loglevel::critical, $message, $context);  }  /**   * runtime errors that do not require immediate action but should typically   * be logged and monitored.   *   * @param string $message   * @param array $context   *   * @return void   */  public function error($message, array $context = array())  {    $this->log(loglevel::error, $message, $context);  }  /**   * exceptional occurrences that are not errors.   *   * example: u of deprecated apis, poor u of an api英语四级学习资料, undesirable things   * that are not necessarily wrong.   *   * @param string $message   * @param array $context   *   * @return void   */  public function warning($message, array $context = array())  {    $this->log(loglevel::warning, $message, $context);  }  /**   * normal but significant events.   *   * @param string $message   * @param array $context   *   * @return void   */  public function notice($message, array $context = array())  {    $this->log(loglevel::notice, $message, $context);  }  /**   * interesting events.   *   * example: ur logs in, sql logs.   *   * @param string $message   * @param array $context   *   * @return void   */  public function info($message, array $context = array())  {    $this->log(loglevel::info, $message, $context);  }  /**   * detailed debug information.   *   * @param string $message   * @param array $context   *   * @return void   */  public function debug($message, array $context = array())  {    $this->log(loglevel::debug, $message, $context);  }}

logger.php继承abstractlogger.php

<?phpnamespace psr\log;u appmis\index\model\logmodel;/** * this logger can be ud to avoid conditional log calls. * * logging should always be optional, and if no logger is provided to your * library creating a nulllogger instance to have something to throw logs at * is a good way to avoid littering your code with `if ($this->logger) { }` * blocks. */class logger extends abstractlogger{  /**   * logs with an arbitrary level.   *   * @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;  }}

这里面的log方法是我自己写的!!!

我们需要把日志存储到数据库中!!!

这里我设计了一个log表,包含id、level、message、 context、ip、url、create_on等。

我创建了一个logmodel.php

<?php/** * @author: jim * @date: 2017/11/16 */namespace app\index\model;u think\model;/** * class logmodel * @package app\index\model * * 继承model之后,就可以使用继承它的属性和方法 * */class logmodel extends model{  protected $pk = 'id'; // 配置主键  protected $table = 'log'; // 默认的表名是log_model  public function add($level = "error",$message = "出错啦",$context = "") {    $this->data([      'level' => $level,      'message' => $message,      'context' => $context,      'ip' => getip(),      'url' => geturl(),      'create_on' => date('y-m-d h:i:s',time())    ]);    $this->save();    return $this->id;  }}

一切都准备好了,可以在控制器中使用了!

<?phpnamespace app\index\controller;u think\controller;u psr\log\logger;class index extends controller{  public function index()  {    $logger = new logger()热带动物;    $context = array();    $context['err'] = "缺少参数id";    $logger->info("有新消息");  }  public function _empty() {    return "empty";  }}

小结:

compor很好很强大!

这里是接口interface的典型案例,定义接口,定义抽象类,定义具体类。

有了命名空间,可以很好的引用不同文件夹下的库!

互相使用,能够防止高内聚!即便是耦合也相对比较独立!

有了这个日志小工具,平时接口的一些报错信息就能很好的捕捉了!

只要

u psr\log\logger;

然后

$logger = new logger();$logger->info("info信息");

使用非常方便!!!

附上获取ip、获取url的方法。

//获取用户真实ipfunction getip() {  if (getenv("http_client_ip") && strcacmp(getenv("http_client_ip"), "unknown"))    $ip = getenv("http_client_ip");  el    if (getenv("http_x_forwarded_for") && strcacmp(getenv("http_x_forwarded_for"), "unknown"))      $ip = getenv("http_x_forwarded_for");    el      if (getenv("remote_addr") && strcacmp(getenv("remote_addr"), "unknown"))        $ip = getenv("remote_addr");      el        if (ist ($_rver['remote_addr']) && $_rver['remote_addr'] && strcacmp($_rver['remote_addr'], "unkn五年级暑假生活答案own"))          $ip = $_rver['remote_addr'];        el          $ip = "unknown";  return ($ip);}// 获取urlfunction geturl() {  return 'http://'.$_rver['rver_name'].':'.$_rver["rver_port"].$_rver["request_uri"];}

更多关于thinkphp相关内容感兴趣的读者可查看本站专题:《thinkphp入门教程》、《thinkphp模板操作技巧总结》、《thinkphp常用方法总结》、《codeigniter入门教程》、《ci(codeigniter)框架进阶教程》、《zend framework框架入门教程》及《php模板技术总结》。

希望本文所述对大家基于thinkphp框架的php程序设计有所帮助。

本文发布于:2023-04-06 16:33:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f041967000521895b4ca2543ab80afd8.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:tp5框架使用composer实现日志记录功能示例.doc

本文 PDF 下载地址:tp5框架使用composer实现日志记录功能示例.pdf

标签:接口   很好   日志   框架
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图