问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用 Monolog 记录日志

发布网友 发布时间:2022-05-20 08:28

我来回答

1个回答

热心网友 时间:2023-10-14 10:43

monolog是一个为5.3以上版本php开发的日志库,但是需要注意的是现在主干版本只支持php 7以上版本,如果你的服务器环境还是php 5的话,可以使用monolog的1.x版本。
值得一提的是monolog是一个符合psr-3规范的日志类库,并且符合psr-4加载规范。如果有对psr规范不太了解的同学可以参看如下链接:http://www.php-fig.org/psr/,我们在这里就不具体介绍这些规范了,反正知道monolog是复合当前最新行业规范的日志库就够了。
如果想要在你的代码中引入monolog的话只需要执行:
composer require monolog/monolog
mongolog中有几个很重要的概念:
第一个:handler 日志管理器
存放handler的数据结构是一个“栈”,一个日志实例可以有多个handler,通过Logger实例的pushHandler方法压入一个handler,该方法接受一个HandlerInterface类型的参数。如果你设置了多个handler,当你新增一条日志的时候,他会从栈顶开始往下传播,关心这个级别日志的handler将会处理这条日志。所有的handler都会继承AbstractProcessingHandler这个抽象类,并且只需要实现里面的抽象方法write就可以了;同时这个抽象类会继承AbstractHandler这个抽象类,这个抽象类的构造函数有两个参数:level和bubble,前者表示该handler关心的最低日志级别,是个整型,后者表示日志被当前handler处理后是否接着向下传递。参照如下代码:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\ErrorLogHandler;
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/my_app.log', Logger::INFO));
$logger->pushHandler(new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, Logger::ERROR, false));
$logger->info('码王教育——可能是最具含金量的IT培训');
如上这段代码,这条日志被ErrorLogHandler处理了,并且ErrorLogHandler的bubble参数设置为false,则日志不会被写入my_app.log中了。
第二个:formatter 设置日志格式
每个handler可以单独设置记录的日志格式,AbstractHandler抽象类中有一个setFormatter方法,该参数接受一个FormatterInterface类型的参数。可以看到monolog自带的formatter都继承自NormalizerFormatter,该类实现了format和formatBatch方法。我们修改上面的示例代码,让两个handler记录不同格式的日志:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\ErrorLogHandler;
use Monolog\Formatter\JsonFormatter;
$logger = new Logger('my_logger');
$stream_handler = new StreamHandler(__DIR__.'/my_app.log', Logger::INFO);
$stream_handler->setFormatter(new JsonFormatter());
$logger->pushHandler($stream_handler);
$logger->pushHandler(new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, Logger::INFO));
$logger->info('码王教育——可能是最具含金量的IT培训');
此时可以看到my_app.log中记录的日志就变为了更方便解析的json格式了。
第三个:processor 日志处理器,用来给日志添加额外信息
存放processor的结构也是一个“栈”,意味着你也可以通过pushProcessor方法给一个Logger实例配置多个processor。我们注意到,这里pushProcessor接受一个callable,也就是需要一个函数或者类方法,但是官方自带的这些processor都是类,随便点进去一个源码就会发现,其实这些类都用到了__invoke魔术方法,所以在被当做callable调用的时候会自动调用__invoke。我们接着修改上面示例,给我们的日志加上更多信息:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\ErrorLogHandler;
use Monolog\Formatter\JsonFormatter;
use Monolog\Processor\UidProcessor;
use Monolog\Processor\ProcessIdProcessor;
$logger = new Logger('my_logger');
$stream_handler = new StreamHandler(__DIR__.'/my_app.log', Logger::INFO);
$stream_handler->setFormatter(new JsonFormatter());
$logger->pushHandler($stream_handler);
$logger->pushHandler(new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, Logger::INFO));
$logger->pushProcessor(new UidProcessor);
$logger->pushProcessor(new ProcessIdProcessor);
$logger->info('码王教育——可能是最具含金量的IT培训');
再次执行这段代码就能看到,我们在日的后面加上了uid和process_id。

祝福楼主
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023文科男生最吃香的专业 哪些专业好就业 在南京想找上海音乐学院的老师,怎么找? 荔枝核怎么服用-荔枝核煮水一般煮几颗合适 属虎适合什么名字2022年新生儿 有内涵热门名字精选 国内读研好,还是出国读研好 出国读研和国内读研哪个更好 在一个比例中,如果两个外项互为倒数。那么两个内向的什么是一?_百度知 ... 两个外项互为倒数,一个内向是8分之3,另一个内项是多少【怎样求出来... 在一个比例中,两个外向互为倒数,其中一个内项是8,另一个内项是_百度... 在比例中两个外项互为倒数,其中一个内向是2.75,另一个内项是多少_百度... 请帮我作答数据结构题目 下载万能路由器 求万能中续路由器推荐 推荐一款带wisp功能的万能中继路由器,主要用于放大wifi信号。不需在主路由器上设置,只需扫描上 万能路由器怎么用 路由器设置好了,网络图标总有个叹号,无线网用不了为什么?万能路由器还没进行设置,都打不开设置页面 万能路由器连接不上电脑,没法上网 万能路由器钥匙怎么用,能解开密码吗?是万能的吗?谢谢 万能路由器 笔记本电脑怎么长运行 微信上出现的是红色的箭头,什么情况?就是,如图的这种情况,请看图。 微信手写输入,点另开行箭头却发了出去,怎办? 后边为什么有箭头? 奥辰磁力研磨机原理是什么 平移式磁力研磨机的原理 电脑桌面图标、任务栏为何消失?怎样用捷键恢复? 室友太过于沙雕怎么办? 沙雕女孩想变高冷,本人年龄较小,请求帮助 怎么样才能让别人知道你是个沙雕? 生活需要一下沙雕的朋友才能味道,你喜欢沙雕的人吗? 一个数据库的数据文件与日志文件不存放在同一个磁盘上的好处是什么? 数据结构:链表的维护与文件形式的保存 华为麦芒5换手机屏得多少钱 专科可以考注册会计证吗 我是一名大专的在校生,今年已经取得了会计证,想明年参加初级会计职称的考试,可以吗? 专科在校学生能考会计从业资格证吗? 请问 中铁十五局的某个项目部 有权对外签署施工合同吗? 谢谢 独立展柜的样式都有哪些 工程款有了付款保证书时间到了可以起诉吗 我们作为施工单位今年和中铁21局签了合同,现在工程竣工 如果签订的施工劳动都是约治乙方的,那么在不得已的情况下签订的合同是否成立? 中标后先施工后签合同违反什么规定 博物馆展柜都有哪些种类? 我在中铁做劳务分包工程,項目部要我们签合同时,在每次计价款中扣留百分之五民工保证金和百分之五质量保 中铁集团怎么样 要详细评论 中国中铁建工集团下属公司中国铁工建设有限公司津保项目部拖欠民工工资一年多了,与几个施工队伍合同违... 中铁十七局五公司,刚签完合同就让我们回家息工,每个月只给300元,合法么? 品诚珠宝展柜都有哪些类型 如何选择最合适的展柜 客厅展示柜的简单介绍 客厅展示柜的制作规则 涉嫌合同造假违约赔偿标准当事人私刻公章合同造假与中铁十八局的工程,我如何 起诉找回我做工的损失