博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tp5下通过composer实现日志记录功能
阅读量:6259 次
发布时间:2019-06-22

本文共 4720 字,大约阅读时间需要 15 分钟。

tp5实现日志记录

1.安装 psr/log

composer require psr/log

422101-20171116115527406-1866179480.png

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

我们可以来细细的分析一下,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"; }}

422101-20171116134011702-76171537.png

小结:

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

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7850916.html,如需转载请自行联系原作者

你可能感兴趣的文章
(转)Unity中protobuf的使用方法
查看>>
**PHP转义Json里的特殊字符的函数
查看>>
数据扩展性探讨和总结--转
查看>>
C# 导出资源文件到硬盘
查看>>
更改MySQL数据库的编码为utf8mb4
查看>>
TeamCity : .NET Core 插件
查看>>
由数量众多照片拼贴而成的马赛克图片
查看>>
andoid电阻触摸移植
查看>>
BootStrap 专题
查看>>
文件上传限制文件类型
查看>>
Netty线程模型
查看>>
判断一个变量是否为空的方法
查看>>
使用PS保存PDF为图片(JPG)
查看>>
Es对于日期处理
查看>>
使用RSA加密在Python中逆向shell
查看>>
关于和技术人员交流的一二三
查看>>
产生sdp文件供DSS使用
查看>>
怎样把数据汇到Excel中的心得经验
查看>>
spring+mybatis的多源数据库配置实战
查看>>
Oracle 导入外部文件数据库
查看>>