awesome PHP之monolog

php中文网
发布: 2016-06-23 13:59:26
原创
1592人浏览过

monolog是php下比较全又容易扩展的记录日志组件。目前有包括symfony 、laravel、 cakephp等诸多知名php框架都内置了monolog。可以通过github clone https://github.com/seldaek/monolog.git 或者 composer安装  require monolog/monolog '~1.7'。monolog代码结果如下:

ErrorHandler.php(设置程序的error hander 、exception hander 给mogolog接管)
Formatter/ (内置的日志显示格式)
Handler/ (各种日志处理类,如写文件、发邮件、写socket、写队列等)
Logger.php (log 处理接口)
Processor/ (内置的处理日志类)
Registry.php --


一个例子用在线上错误日志记录上,可以替换默认错误日志的处理方式

立即学习PHP免费学习笔记(深入)”;

图标样式-FONT-AWESOME
图标样式-FONT-AWESOME

图标样式-FONT-AWESOME

图标样式-FONT-AWESOME 271
查看详情 图标样式-FONT-AWESOME

[php]  view plain copy

  1. require __DIR__ . '/vendor/autoload.php';  
  2. use Monolog\Logger;  
  3. use Monolog\Handler\StreamHandler;  
  4. use Monolog\Handler\BufferHandler;  
  5. use Monolog\ErrorHandler;  
  6. use Monolog\Processor\MemoryUsageProcessor;  
  7.   
  8.   
  9. $logger = new Logger('error_logger');  
  10. $stream = new StreamHandler(__DIR__.'/error.log', Logger::ERROR);  
  11. $logger->pushHandler(new BufferHandler($stream, 10, Logger::DEBUG, true, true));//用BufferHandler设置同一请求下日志数达到10条再写一次文件  
  12. ErrorHandler::register($logger);  
  13.   
  14. //code...  

monolog完全按照面向对象思想写的,它本身有符合fig的psr-3 prs-4规则,所以扩展起来非常方便,下面是作者文档上写的一个日志入数据库的一个例子

立即学习PHP免费学习笔记(深入)”;

[php]  view plain copy

  1. use Monolog\Logger;  
  2. use Monolog\Handler\AbstractProcessingHandler;  
  3.   
  4. class PDOHandler extends AbstractProcessingHandler  
  5. {  
  6.     private $initialized = false;  
  7.     private $pdo;  
  8.     private $statement;  
  9.   
  10.     public function __construct(PDO $pdo, $level = Logger::DEBUG, $bubble = true)  
  11.     {  
  12.         $this->pdo = $pdo;  
  13.         parent::__construct($level, $bubble);  
  14.     }  
  15.   
  16.     protected function write(array $record)  
  17.     {  
  18.         if (!$this->initialized) {  
  19.             $this->initialize();  
  20.         }  
  21.   
  22.         $this->statement->execute(array(  
  23.             'channel' => $record['channel'],  
  24.             'level' => $record['level'],  
  25.             'message' => $record['formatted'],  
  26.             'time' => $record['datetime']->format('U'),  
  27.         ));  
  28.     }  
  29.   
  30.     private function initialize()  
  31.     {  
  32.         $this->pdo->exec(  
  33.             'CREATE TABLE IF NOT EXISTS monolog '  
  34.             .'(channel VARCHAR(255), level INTEGER, message LONGTEXT, time INTEGER UNSIGNED)'  
  35.         );  
  36.         $this->statement = $this->pdo->prepare(  
  37.             'INSERT INTO monolog (channel, level, message, time) VALUES (:channel, :level, :message, :time)'  
  38.         );  
  39.   
  40.         $this->initialized = true;  
  41.     }  
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号