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:学会封装,学会分层。

原文地址:https://www.cnblogs.com/jiqing9006/p/9233417.html

时间: 2024-08-04 06:37:00

monolog 应该是世界上最好的日志插件了的相关文章

Git是目前世界上最先进的分布式版本控制系统

一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库

GREENWORKS.XFROG.V4 for maya6.0 世界上唯一一个可以方便地表现植物生长的软件,这是maya6的版本)

Greenworks Xfrog v4.2.2 for C4D 9.rar 世界上唯一一个可以方便地表现植物生长的软件 Greenworks.Xfrog.v4.3.for.Cinema4D.32bit.rar 用来创建有机类组织结构的3D软件 Greenworks XFrog v3.5.051204 1CD(用于有机体建模及动画的3D软件) Greenworks XFrogTune v1.0.140302 1CD(适用于Cinema 4D的插件.用以制作生物以及其动态效果) GreenWorks

Greenworks Xfrog v4.2.2 for C4D 9.rar 世界上唯一一个可以方便地表现植物生长的软件

Greenworks.Xfrog.v4.3.for.Cinema4D.32bit.rar 用来创建有机类组织结构的3D软件 GREENWORKS.XFROG.V4 for maya6.0 世界上唯一一个可以方便地表现植物生长的软件,这是maya6的版本) Greenworks XFrog v3.5.051204 1CD(用于有机体建模及动画的3D软件) Greenworks XFrogTune v1.0.140302 1CD(适用于Cinema 4D的插件.用以制作生物以及其动态效果) Gree

当世界上只剩下一个Java程序员

公元2050年,世界上只剩下了一个Java程序员. 你可能要问了,别的人都去哪儿了?原因很简单, Java没落了. 大约在2030年左右,出现了一个叫做X的语言,它既能做系统级开发(操作系统.数据库.编译器),也能做服务器端的开发,手机端,Web端都不在话下. 更为重要的是,这个新的编程语言和人类的自然语言很接近,无论大人小孩,稍微一学,很快就可以来编程.于是排名前100的语言统统消失了, 程序员们都失业了. Java也不例外,这个昔日的霸主在留下了一堆庞大而复杂的系统以后就不见了. Java程

为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?

为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技术上面也能够做到快速部署和挑战.而对用户而言,好用且逻辑性强,体验好.便利可掌控才是能够抓住用户的需求点.很可惜的是,纵观世界上这么多的ERP系统,真正能够为用户考虑而且有自己的核心竞争力的并不多. 我认为一套好的ERP系统,不仅仅是一套软件,更是一个管理思想.选型ERP,要从以下几方面考虑: 一.

转载-从信息论角度论证为什么汉语是世界上最先进的语言--引用多项实验数据

[转载]从信息论角度论证为什么汉语是世界上最先进的语言–引用多项实验数据 作者:汉语计算机应用研究小组(笔名:冷酷的哲学?) 一.语言水平高低的评判准则 口语,实际上是一种通讯协议.就是说,语言实际上是把人的思想通过发音器官变成一串频率不同.波形不同的声波,然后被另一个体的听觉器官和相关的脑部组织重新转变回思想.通讯协议,就是一个规则,一个规定了应该如何把思想/信息转变为易于传输的信号的规则 计算机上,通讯协议有两个基本评判标准:[传输效率]和[抗噪能力] 传输效率:在单位时间里,按照该通讯协议

ELK菜鸟手记 (四) - 利用filebeat和不同端口把不同服务器上的log4j日志传输到同一台ELK服务器

1. 问题描述  我们需要将不同服务器(如Web Server)上的log4j日志传输到同一台ELK服务器,介于公司服务器资源紧张(^_^) 2. 我们需要用到filebeat 什么是filebeat? filebeat被用来ship events,即把一台服务器上的文件日志通过socket的方式,传输到远程的ELK. 可以传输到logstash,也可以直接传输到elasticsearch. 3. 我们这里讲解如何传输到远程的logstash,然后再由elasticsearch讲数据传输到kib

centos下简单实现日志切割,并上传至日志服务器。

#!/bin/bash #大于500M的日志上传至日志服务器并清除 count=$[1024*1024*500]#500M file_size=`ll /var/log/httpd/access_log| awk '{print $5}'` passwd="magedu.com"#注意变量最好在expect外定义,不知道什么原因我在expect里面定义不成功 if [ $file_size -gt $count ] then /usr/bin/expect << EOF s

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

http://zhidao.baidu.com/link?url=NSYPiSvtGTMoqMA9vt68FRRF8WbfYVmwWeMh47_2lkp0K3jFMl--1Co1tg1R4VshTQV2De1JeG-fh3Ezu5j-3q Git是什么?Git是目前世界上最先进的分布式版本控制系统(没有之一).Git有什么特点?简单来说就是:高端大气上档次!那什么是版本控制系统?如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?