Zend_Log使用
来源:互联网 发布:聚合支付系统源码 编辑:程序博客网 时间:2024/06/05 11:54
Zend_Log 是一个通用日志组件,它支持多个日志后端,格式化发送给日志的消息,过滤被纪录的消息。这些功能被划分为如下的对象:
Zend_Log,可以有任意多个Log对象,他们之间不会相互影响。一个Log对象至少包含一个或多个writer对象,可选的可包含一个或多个filter对象。个人理解:Zend_Log就相当于一个空的笔记本,而wirter顾名思义就是往笔记本上写字的笔,所以需要至少一个或多个;filter就相当于过滤器,毕竟不能往笔记本上乱写嘛,它的作用就是什么该写,什么不该写。
Zend_Log_Writer_Abstract抽象类,它其下的子实例有:
Zend_Log_Writer_Stream,相当于写文件流的铅笔。
Zend_Log_Writer_Mail,将日志信息以邮件的型式,记录发送。
Zend_Log_Writer_Db,将日志信息以数据库的型式记录。
Zend_Log_Filter_Interface,也就是上面多提到的过滤器接口,它其下的实例有:
Zend_Log_Filter_Message,以正则的型式阻塞信息。
Zend_Log_Filter_Priority,阻塞日志等级。
Zend_Log_Formatter_Interface格式化接口,就是将Log信息以自定义型式输出,它其下的实例有:
Zend_Log_Formatter_Simple,比较常用的类,下面我们会讲到。
Zend_Log_Formatter_Xml,已XML的型式记录Log信息。
上面说了这么多的理论,来的实惠的了,上菜!顺便说下,在真正使用Zend_Log的时候,应该将它封装成Singleton,并通过application.ini来配置。以上纯属个人理解,有什么错误的地方还请指正:)。言归正传,下面我将分为Writer的三个实例,来分别上菜。
第一道菜:Zend_Log_Writer_Stream
view plaincopy to clipboardprint?
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';
require_once 'Zend/Log/Formatter/Simple.php';
//Zend_Log实例
$log = new Zend_Log();
//设置EventItem
$log->setEventItem('pid',getmypid());
$log->setEventItem('ip',getIP());
//获取文本文件路径
//已日期定义文件名称
$file = 路径 .'/log/log-' . date('y-m-d') . '.log';
$stream = @fopen($file,'a',false);
//Zend_Log_Writer_Stream实例
$writer = new Zend_Log_Writer_Stream($stream);
//格式化输出Log信息
//%timestamp%为站位符,显示输出
$format = '[%timestamp%][%priorityName%-%priority%]-[PID:%pid%][ip:%ip%]' . PHP_EOL
. '%message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
$writer->setFormatter($formatter);
//添加writer
$log->addWriter($writer);
//添加过滤器,相当于Zend_Log_Filter_Priority
$log->addFilter(3);
//写日志
$log->log('Hello Dante.What/'s going on?',3);
exit;
/**
* 获得IP地址
* @return ip
**/
function getIP()
{
$realip = NULL;
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else {
$realip = getenv('REMOTE_ADDR');
}
}
return $realip;
}
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';
require_once 'Zend/Log/Formatter/Simple.php';
//Zend_Log实例
$log = new Zend_Log();
//设置EventItem
$log->setEventItem('pid',getmypid());
$log->setEventItem('ip',getIP());
//获取文本文件路径
//已日期定义文件名称
$file = 路径 .'/log/log-' . date('y-m-d') . '.log';
$stream = @fopen($file,'a',false);
//Zend_Log_Writer_Stream实例
$writer = new Zend_Log_Writer_Stream($stream);
//格式化输出Log信息
//%timestamp%为站位符,显示输出
$format = '[%timestamp%][%priorityName%-%priority%]-[PID:%pid%][ip:%ip%]' . PHP_EOL
. '%message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
$writer->setFormatter($formatter);
//添加writer
$log->addWriter($writer);
//添加过滤器,相当于Zend_Log_Filter_Priority
$log->addFilter(3);
//写日志
$log->log('Hello Dante.What/'s going on?',3);
exit;
/**
* 获得IP地址
* @return ip
**/
function getIP()
{
$realip = NULL;
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else {
$realip = getenv('REMOTE_ADDR');
}
}
return $realip;
}
上面的代码有两点我需要说下:
$log->setEventItem(key,value);本人第一次看见的时候很困惑,官方说的也很泛泛,日志事件。其实就是以键值对儿的型式保存信息,并通过formatter以%key%站位符显示输出。其中上面的getmypid()是PHP函数,获得当前PHP进程号;getIP()是自定义函数,获得IP地址。
$log->addFilter(int),添加过滤器,相当于Zend_Log_Filter_Priority。意思就是堵塞日志等级3以外的信息。日志等级一共有8种,也可自定义8种以外等级,具体可去官网http://framework.zend.com/manual/zh/zend.log.html查阅。
第二道菜:Zend_Log_Writer_Db
数据库表以MYSQL为例:
view plaincopy to clipboardprint?
--
-- 表的结构 `logs`
--
DROP TABLE IF EXISTS `logs`;
CREATE TABLE IF NOT EXISTS `logs` (
`logID` bigint(20) NOT NULL auto_increment,
`logPid` int(10) NOT NULL,
`logType` tinyint(3) NOT NULL,
`logName` varchar(20) collate utf8_unicode_ci NOT NULL,
`logIp` varchar(30) collate utf8_unicode_ci default '127.0.0.1',
`logTime` timestamp NULL default NULL,
`logMsg` text collate utf8_unicode_ci,
PRIMARY KEY (`logID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
--
-- 表的结构 `logs`
--
DROP TABLE IF EXISTS `logs`;
CREATE TABLE IF NOT EXISTS `logs` (
`logID` bigint(20) NOT NULL auto_increment,
`logPid` int(10) NOT NULL,
`logType` tinyint(3) NOT NULL,
`logName` varchar(20) collate utf8_unicode_ci NOT NULL,
`logIp` varchar(30) collate utf8_unicode_ci default '127.0.0.1',
`logTime` timestamp NULL default NULL,
`logMsg` text collate utf8_unicode_ci,
PRIMARY KEY (`logID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
表的column可根据自己的需要来定义,以上代码仅供参考。
view plaincopy to clipboardprint?
require_once 'Zend/Db.php';
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Db.php';
//Zend_Log实例
$log = new Zend_Log();
//设置EventItem
$log->setEventItem('pid',getmypid());
$log->setEventItem('ip',getIP());
//通过Zend_Db工厂创建DB
$dbAdapter = Zend_Db::factory('PDO_MYSQL',array(
'host' => 'localhost'
,'dbname' => 'Lap'
,'username' => 'root'
,'password' => '1986630187'
,'charset' => 'UTF8'
));
//数据库字段配置
$columns = array(
'logPid' => 'pid'
,'logType' => 'priority'
,'logName' => 'priorityName'
,'logIp' => 'ip'
,'logTime' => 'timestamp'
,'logMsg' => 'message'
);
//Zend_Log_Writer_Db实例,logs为表名
$writerDb = new Zend_Log_Writer_Db($dbAdapter,'logs',$columns);
//添加wirter
$log->addWriter($writerDb);
$log->log('Hello Dante.What/'s going on?',3);
exit;
/**
* 获得IP地址
* @return ip
**/
function getIP()
{
$realip = NULL;
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else {
$realip = getenv('REMOTE_ADDR');
}
}
return $realip;
}
require_once 'Zend/Db.php';
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Db.php';
//Zend_Log实例
$log = new Zend_Log();
//设置EventItem
$log->setEventItem('pid',getmypid());
$log->setEventItem('ip',getIP());
//通过Zend_Db工厂创建DB
$dbAdapter = Zend_Db::factory('PDO_MYSQL',array(
'host' => 'localhost'
,'dbname' => 'Lap'
,'username' => 'root'
,'password' => '1986630187'
,'charset' => 'UTF8'
));
//数据库字段配置
$columns = array(
'logPid' => 'pid'
,'logType' => 'priority'
,'logName' => 'priorityName'
,'logIp' => 'ip'
,'logTime' => 'timestamp'
,'logMsg' => 'message'
);
//Zend_Log_Writer_Db实例,logs为表名
$writerDb = new Zend_Log_Writer_Db($dbAdapter,'logs',$columns);
//添加wirter
$log->addWriter($writerDb);
$log->log('Hello Dante.What/'s going on?',3);
exit;
/**
* 获得IP地址
* @return ip
**/
function getIP()
{
$realip = NULL;
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else {
$realip = getenv('REMOTE_ADDR');
}
}
return $realip;
}
第三道菜:Zend_Log_Writer_Email
view plaincopy to clipboardprint?
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Mail.php';
require_once 'Zend/Mail.php';
//Zend_Mail实例
$mail = new Zend_Mail();
//发件人
$mail->setFrom('somebody@example.com', 'Some Sender');
//邮寄到
$mail->addTo('somebody_else@example.com', 'Some Recipient');
//主题
$mail->setSubject('TestSubject');
$log = new Zend_Log();
$writer = new Zend_Log_Writer_Mail($mail);
$log->addWriter($writer);
$log->log('Hello Dante.What/'s going on?',3);
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Mail.php';
require_once 'Zend/Mail.php';
//Zend_Mail实例
$mail = new Zend_Mail();
//发件人
$mail->setFrom('somebody@example.com', 'Some Sender');
//邮寄到
$mail->addTo('somebody_else@example.com', 'Some Recipient');
//主题
$mail->setSubject('TestSubject');
$log = new Zend_Log();
$writer = new Zend_Log_Writer_Mail($mail);
$log->addWriter($writer);
$log->log('Hello Dante.What/'s going on?',3);
三道菜终于上齐了,希望味道还可以。刚才有个小插曲,我写一半的时候为了看效果发表了一下,突然发现刚才写的东西全没了,也没有发表成功,崩溃了都。不过还好还是硬着头皮重写了一遍。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dante_k7/archive/2009/08/06/4418681.aspx
- Zend_Log使用
- Zend_Log使用
- 5. Zend_Log
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用++,--
- 使用$@ $!
- 使用
- SoftICE使用(指令使用)
- 使用GraphEdit使用
- 使用HtmlParser使用心得
- 时钟使用使用
- Ubuntu 使用Git 使用
- Ubuntu 使用Git 使用
- Linux netfilter源码分析(5)
- Microsoft .NET Framework 3.5 sp1离线安装解决方案
- Linux命令行下编辑常用快捷键
- 分页
- 实现iFrame自适应高度,原来很简单!
- Zend_Log使用
- 查iphone url schemes的好地方
- MS-Sql Server表无法删除
- extjs图片串位
- 游标使用示例
- Fedora 12 添加163源
- oracle 行级锁
- 不同表空间导入数据
- 遍历页面上所有checkbox的两种方法