awesome PHP之monolog
2014-04-07 15:54
411 查看
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] view
plaincopy
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\BufferHandler;
use Monolog\ErrorHandler;
use Monolog\Processor\MemoryUsageProcessor;
$logger = new Logger('error_logger');
$stream = new StreamHandler(__DIR__.'/error.log', Logger::ERROR);
$logger->pushHandler(new BufferHandler($stream, 10, Logger::DEBUG, true, true));//用BufferHandler设置同一请求下日志数达到10条再写一次文件
ErrorHandler::register($logger);
//code...
monolog完全按照面向对象思想写的,它本身有符合fig的psr-3 prs-4规则,所以扩展起来非常方便,下面是作者文档上写的一个日志入数据库的一个例子
[php] view
plaincopy
use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
class PDOHandler extends AbstractProcessingHandler
{
private $initialized = false;
private $pdo;
private $statement;
public function __construct(PDO $pdo, $level = Logger::DEBUG, $bubble = true)
{
$this->pdo = $pdo;
parent::__construct($level, $bubble);
}
protected function write(array $record)
{
if (!$this->initialized) {
$this->initialize();
}
$this->statement->execute(array(
'channel' => $record['channel'],
'level' => $record['level'],
'message' => $record['formatted'],
'time' => $record['datetime']->format('U'),
));
}
private function initialize()
{
$this->pdo->exec(
'CREATE TABLE IF NOT EXISTS monolog '
.'(channel VARCHAR(255), level INTEGER, message LONGTEXT, time INTEGER UNSIGNED)'
);
$this->statement = $this->pdo->prepare(
'INSERT INTO monolog (channel, level, message, time) VALUES (:channel, :level, :message, :time)'
);
$this->initialized = true;
}
ErrorHandler.php(设置程序的error hander 、exception hander 给mogolog接管)
Formatter/ (内置的日志显示格式)
Handler/ (各种日志处理类,如写文件、发邮件、写socket、写队列等)
Logger.php (log 处理接口)
Processor/ (内置的处理日志类)
Registry.php --
一个例子用在线上错误日志记录上,可以替换默认错误日志的处理方式
[php] view
plaincopy
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\BufferHandler;
use Monolog\ErrorHandler;
use Monolog\Processor\MemoryUsageProcessor;
$logger = new Logger('error_logger');
$stream = new StreamHandler(__DIR__.'/error.log', Logger::ERROR);
$logger->pushHandler(new BufferHandler($stream, 10, Logger::DEBUG, true, true));//用BufferHandler设置同一请求下日志数达到10条再写一次文件
ErrorHandler::register($logger);
//code...
monolog完全按照面向对象思想写的,它本身有符合fig的psr-3 prs-4规则,所以扩展起来非常方便,下面是作者文档上写的一个日志入数据库的一个例子
[php] view
plaincopy
use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
class PDOHandler extends AbstractProcessingHandler
{
private $initialized = false;
private $pdo;
private $statement;
public function __construct(PDO $pdo, $level = Logger::DEBUG, $bubble = true)
{
$this->pdo = $pdo;
parent::__construct($level, $bubble);
}
protected function write(array $record)
{
if (!$this->initialized) {
$this->initialize();
}
$this->statement->execute(array(
'channel' => $record['channel'],
'level' => $record['level'],
'message' => $record['formatted'],
'time' => $record['datetime']->format('U'),
));
}
private function initialize()
{
$this->pdo->exec(
'CREATE TABLE IF NOT EXISTS monolog '
.'(channel VARCHAR(255), level INTEGER, message LONGTEXT, time INTEGER UNSIGNED)'
);
$this->statement = $this->pdo->prepare(
'INSERT INTO monolog (channel, level, message, time) VALUES (:channel, :level, :message, :time)'
);
$this->initialized = true;
}
相关文章推荐
- PHP基础之字符串比较
- PHP数组与java数组的区别
- php框架开发yii之创建第一个应用
- YII 自动引入juquery进行表单验证
- PHPExcel
- yii 验证用户名是否存在 array("name","unique",'message'=>'用户名已经存在'),
- yii 验证确认密码是否一致 【"compare",'compareAttribute'=>'password'】
- php中 now()与date() 有什么区别
- PHP 字符串常用方法
- php解决乱码问题时,出现Cannot modify header information问题的解决方法
- php获取客户端IP
- vsftp/wordpress
- vsftp服务搭建和配置
- 全站301跳转 PHP
- matplotlib 安装
- F3-fatfree小型php框架教程(六)数据库篇
- PHP面向对象之对象串行化和反串行化
- 升级php5.5.10扩展不兼容
- PHP文件下载
- Win7+IIS+PHP+MySql 配置