monolog 应该是世界上最好的日志插件了
引入
composer require monolog/monolog
官网
https://github.com/Seldaek/monolog

创建工具类
<?php
/**
* 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();
}
}
创建测试类
<?php
/**
* 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:学会封装,学会分层。
monolog 应该是世界上最好的日志插件了的更多相关文章
- 这可能是php世界中最好的日志库——monolog
由于一些历史原因,php中并没有内建的日志接口,故长期以来也没一个功能完备并且应用广泛的日志库.在我的工作生涯中,如果系统需要记录一些应用日志的话,基本上就是封装一个日志类,然后把一些要记录的字段写入 ...
- Git是目前世界上最先进的分布式版本控制系统
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- 为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?
为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技 ...
- Nivo Slider - 世界上最棒的 jQuery 图片轮播插件
Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...
- 世界上不存在什么RedBSD,SuseBSD或者ArchBSD,Turb...
世界上不存在什么RedBSD,SuseBSD或者ArchBSD,TurboBSD之类的东西.
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- 世界上最方便的SharePoint移动客户端--Rshare
Rshare我试用了一段时间,同时也测试了其他家产品,使用后的感觉是Rshare无愧于世界上最方面的SharePoint移动客户端. 1.界面设计很方便,设计中充分考虑到移动客户的使用习惯及喜好,设计 ...
- HDU-4515 小Q系列故事——世界上最遥远的距离
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- Smartdraw世界上最流行的商业绘图软件
Smartdraw 更多图片(5张) SmartDraw是世界上最流行的商业绘图软件.2006 年获美国政府司法部 (U.S. Department of Justice) 专用软件,2007获美国政 ...
随机推荐
- 一些官方的github地址
阿里巴巴开源github地址:https://github.com/alibaba 腾讯开源github地址:https://github.com/Tencent 奇虎360github地址:http ...
- hackerrankWeek of Code 32
hackerrankWeek of Code 32 A.Duplication B.Fight the Monsters! C.Circular Walk D.Geometric Trick E.Ba ...
- angular2-scroll-module
这篇介绍一下,写一个自己的angular2滚动监听插件 目录结构: /scrollModule: ztw-scroll.module.ts; scrollBind.directive.ts; scro ...
- 命令行连接db2数据库
在cmd界面执行db2cmd命令 然后在db2cmd界面执行db2命令 然后执行 CONNECT TO UIBS USER DB2INST1 USING 123456命令
- [eShopOnContainers 学习系列] - 00 - 开发环境需求
开发环境需求 https://github.com/dotnet-architecture/eShopOnContainers/wiki/00.-Dev-machine-requirements 我的 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- Git_学习_11_Git rebase合并提交信息
一.前言 二.操作过程 (1)先后两次进行文件修改,然后提交到本地仓库. (2)使用 git rebase -i origin/dev 来合并提交信息. 会弹出一个编辑框 p 07c5abd Intr ...
- Flask的消息message机制flash
Flask的消息机制flash message是一个基于session实现的用于保存数据的集合,其特点是:使用一次就删除. 原理就是 操作成功 session['操作'] = 'msg' # 设置 s ...
- Leetcode 807. Max Increase to Keep City Skyline
class Solution(object): def maxIncreaseKeepingSkyline(self, grid): """ :type grid: Li ...
- php语法笔记
1. php中设置页面的编码方式: header(“content-type:text/html;charset=utf-8”); 2. 数据类型 布尔类型:Boolean/bool:true.f ...