monolog mysql_monolog 应该是世界上最好的日志插件了

引入

composer require monolog/monolog

e315b1b8828deda9cbee249fd1fa29cc.png

创建工具类

/**

* Created by PhpStorm.

* User: jiqing

* Date: 18-6-27

* Time: 上午11:19

*/

require '../vendor/autoload.php';

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

use Monolog\Processor\UidProcessor;

use Monolog\Processor\ProcessIdProcessor;

use Monolog\Formatter\LineFormatter;

use Monolog\Formatter\JsonFormatter;

class MyLog {

public static function setLog($content = [],$msg = "msg",$level = Logger::NOTICE ,$name = "jq",$formatter = "line",$path = "/tmp/jq.log") {

// create a log channel

$log = new Logger($name);

$stream_handler = new StreamHandler($path, Logger::DEBUG); // 过滤级别

switch (strtolower($formatter)) {

case "line":

$stream_handler->setFormatter(new LineFormatter());

break;

case "json":

$stream_handler->setFormatter(new JsonFormatter());

break;

default:

}

$log->pushHandler($stream_handler);

$uid_obj = new UidProcessor();

$log->pushProcessor($uid_obj);

$pid_obj = new ProcessIdProcessor();

$log->pushProcessor($pid_obj);

// add records to the log

switch (strtoupper($level)) {

case Logger::DEBUG:

case 1:

case "DEBUG":

$log->debug($msg,$content);

break;

case Logger::INFO:

case 2:

case "INFO":

$log->info($msg,$content);

break;

case Logger::NOTICE:

case 3:

case "NOTICE":

$log->notice($msg,$content);

break;

case Logger::WARNING:

case 4:

case "WARNING":

$log->warning($msg,$content);

break;

case Logger::ERROR:

case 5:

case "ERROR":

$log->error($msg,$content);

break;

case Logger::CRITICAL:

case 6:

case "CRITICAL":

$log->critical($msg,$content);

break;

case Logger::ALERT:

case 7:

case "ALERT":

$log->alert($msg,$content);

break;

case Logger::EMERGENCY:

case 8:

case "EMERGENCY":

$log->emergency($msg,$content);

break;

default:

$log->debug($msg,$content);

}

return $uid_obj->getUid();

}

}

创建测试类

/**

* Created by PhpStorm.

* User: jiqing

* Date: 18-6-27

* Time: 上午11:23

*/

class TestAction extends IndexAction

{

public function testLog() {

vendor('Log.MyLog');

MyLog::setLog("content1");

MyLog::setLog("content2","");

MyLog::setLog("content3","","error");

MyLog::setLog("content4","","5");

MyLog::setLog("content5","","400");

MyLog::setLog("content6","","400","jiqing","json");

MyLog::setLog("content7","","400","jiqing","line");

MyLog::setLog(["content8"],"","400","jiqing","line");

MyLog::setLog(["content8"],"","400","jiqing","line","/tmp/jq.log");

MyLog::setLog(["content8"],"","400","jiqing","line","/tmp/jq.log");

}

}

查看结果

[2018-06-27 12:55:24] jq.NOTICE: msg content1 {"process_id":2729,"uid":"ecbd811"}

[2018-06-27 12:55:24] jq.NOTICE: content2 {"process_id":2729,"uid":"4b2041e"}

[2018-06-27 12:55:24] jq.ERROR: content3 {"process_id":2729,"uid":"805f3d6"}

[2018-06-27 12:55:24] jq.ERROR: content4 {"process_id":2729,"uid":"c3c1706"}

[2018-06-27 12:55:24] jq.ERROR: content5 {"process_id":2729,"uid":"c01087f"}

{"message":"","context":"content6","level":400,"level_name":"ERROR","channel":"jiqing","datetime":{"date":"2018-06-27 12:55:24.037391","timezone_type":3,"timezone":"PRC"},"extra":{"process_id":2729,"uid":"f4528b7"}}

[2018-06-27 12:55:24] jiqing.ERROR: content7 {"process_id":2729,"uid":"532ac58"}

[2018-06-27 12:55:24] jiqing.ERROR: ["content8"] {"process_id":2729,"uid":"3d5751c"}

它支持功能很多,这里只是其中的一小部分。可以line展示,可以json展示,可以html展示结果。

可以记录每一次的进程id,每一次用户id。记录时间。

内容支持字符串,支持数组。

可以支持日志级别。

可以设置名称,区分是谁操作的。

很牛逼。

ps:学会封装,学会分层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值