侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

php  /  管理员 发布于 5年前   1085

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

tp5实现日志记录

1.安装 psr/log

composer require psr/log

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

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

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

LogLevel.php

定义一些错误常量。

AbstractLogger.php实现接口

log(LogLevel::EMERGENCY, $message, $context);  }  /**   * Action must be taken immediately.   *   * Example: Entire website down, database 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: Use of deprecated APIs, poor use 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: User 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

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

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;  }}

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

info("有新消息");  }  public function _empty() {    return "empty";  }}

小结:

composer很好很强大!

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

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

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

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

只要

use Psr\Log\Logger;

然后

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

使用非常方便!!!

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

//获取用户真实IPfunction getIp() {  if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))    $ip = getenv("HTTP_CLIENT_IP");  else    if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))      $ip = getenv("HTTP_X_FORWARDED_FOR");    else      if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))        $ip = getenv("REMOTE_ADDR");      else        if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))          $ip = $_SERVER['REMOTE_ADDR'];        else          $ip = "unknown";  return ($ip);}// 获取urlfunction getUrl() {  return 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];}

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

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

您可能感兴趣的文章:

  • windows环境下使用Composer安装ThinkPHP5
  • THINKPHP项目开发中的日志记录实例分析
  • ThinkPHP调试模式与日志记录概述
  • thinkPHP5实现的查询数据库并返回json数据实例
  • thinkPHP5(TP5)实现改写跳转提示页面的方法
  • ThinkPHP5联合(关联)查询、多条件查询与聚合查询实例详解
  • thinkPHP5.0框架URL访问方法详解
  • thinkPHP5分页功能实现方法分析
  • thinkPHP5实现数据库添加内容的方法
  • Thinkphp5.0自动生成模块及目录的方法详解


  • 上一条:
    Thinkphp5+PHPExcel实现批量上传表格数据功能
    下一条:
    tp5(thinkPHP5)框架连接数据库的方法示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客