# 日志记录(Logging)
Phalcon提供了一个日志记录组件即[Phalcon\\Logger](http://docs.iphalcon.cn/api/Phalcon_Logger.html)。 我们可以使用此组件输出日志到不同的流中,如文件,系统日志等。 这个组件还提供了其它的功能如日志事务(类似于数据库的事务), 配置选项, 还可以输出不同的格式,另外还支持多种过滤器。[Phalcon\\Logger](http://docs.iphalcon.cn/api/Phalcon_Logger.html)提供了多种日志记录方式,从调试程序到跟踪应用的执行以满足应用的需求。
## 适配器(Adapters)
此组件使用不同的流适配器来保存日信息。 我们可以按需使用适配器。支持的适配器如下:
| 适配器 | 描述 |
| --- | --- |
| [Phalcon\\Logger\\Adapter\\File](http://docs.iphalcon.cn/api/Phalcon_Logger_Adapter_File.html) | 保存日志到普通文件 |
| [Phalcon\\Logger\\Adapter\\Stream](http://docs.iphalcon.cn/api/Phalcon_Logger_Adapter_Stream.html) | 保存日志到PHP流 |
| [Phalcon\\Logger\\Adapter\\Syslog](http://docs.iphalcon.cn/api/Phalcon_Logger_Adapter_Syslog.html) | 保存到系统日志 |
| [Phalcon\\Logger\\Adapter\\FirePHP](http://docs.iphalcon.cn/api/Phalcon_Logger_Adapter_Firephp.html) | 发送日志到FirePHP |
## 创建日志(Creating a Log)
下面的例子展示了如何创建日志对象及如何添加日志信息:
~~~
<?php
use Phalcon\Logger;
use Phalcon\Logger\Adapter\File as FileAdapter;
$logger = new FileAdapter("app/logs/test.log");
// These are the different log levels available:
$logger->critical(
"This is a critical message"
);
$logger->emergency(
"This is an emergency message"
);
$logger->debug(
"This is a debug message"
);
$logger->error(
"This is an error message"
);
$logger->info(
"This is an info message"
);
$logger->notice(
"This is a notice message"
);
$logger->warning(
"This is a warning message"
);
$logger->alert(
"This is an alert message"
);
// You can also use the log() method with a Logger constant:
$logger->log(
"This is another error message",
Logger::ERROR
);
// If no constant is given, DEBUG is assumed.
$logger->log(
"This is a message"
);
// You can also pass context parameters like this
$logger->log(
"This is a {message}",
[
'message' => 'parameter'
]
);
~~~
产生的日志信息如下:
~~~
[Tue, 28 Jul 15 22:09:02 -0500][CRITICAL] This is a critical message
[Tue, 28 Jul 15 22:09:02 -0500][EMERGENCY] This is an emergency message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a debug message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is an error message
[Tue, 28 Jul 15 22:09:02 -0500][INFO] This is an info message
[Tue, 28 Jul 15 22:09:02 -0500][NOTICE] This is a notice message
[Tue, 28 Jul 15 22:09:02 -0500][WARNING] This is a warning message
[Tue, 28 Jul 15 22:09:02 -0500][ALERT] This is an alert message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is another error message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a parameter
~~~
You can also set a log level using the`setLogLevel()`method. This method takes a Logger constant and will only save log messages that are as important or more important than the constant:
~~~
<?php
use Phalcon\Logger;
use Phalcon\Logger\Adapter\File as FileAdapter;
$logger = new FileAdapter("app/logs/test.log");
$logger->setLogLevel(
Logger::CRITICAL
);
~~~
In the example above, only critical and emergency messages will get saved to the log. By default, everything is saved.
## 事务(Transactions)
保存日志到适配器如文件(文件系统)是非常消耗系统资源的。 为了减少应用性能上的开销,我们可以使用日志事务。 事务会把日志记录临时的保存到内存中然后再 写入到适配中(此例子中为文件),(这个操作是个原子操作)
~~~
<?php
use Phalcon\Logger\Adapter\File as FileAdapter;
// 生成日志新组件实例
$logger = new FileAdapter("app/logs/test.log");
// 开启事务
$logger->begin();
// 添加消息
$logger->alert(
"This is an alert"
);
$logger->error(
"This is another error"
);
// 保存消息到文件中
$logger->commit();
~~~
## 使用多个处理程序进行日志记录(Logging to Multiple Handlers)
[Phalcon\\Logger](http://docs.iphalcon.cn/api/Phalcon_Logger.html)也可以同时保存日志信息到多个适配器中:
~~~
<?php
use Phalcon\Logger;
use Phalcon\Logger\Multiple as MultipleStream;
use Phalcon\Logger\Adapter\File as FileAdapter;
use Phalcon\Logger\Adapter\Stream as StreamAdapter;
$logger = new MultipleStream();
$logger->push(
new FileAdapter("test.log")
);
$logger->push(
new StreamAdapter("php://stdout")
);
$logger->log(
"This is a message"
);
$logger->log(
"This is an error",
Logger::ERROR
);
$logger->error(
"This is another error"
);
~~~
信息发送的顺序和处理器(适配器)注册的顺序相同。
## 信息格式(Message Formatting)
此组件使用 formatters 在信息发送前格式化日志信息。 支持下而后格式:
| 适配器 | 描述 |
| --- | --- |
| [Phalcon\\Logger\\Formatter\\Line](http://docs.iphalcon.cn/api/Phalcon_Logger_Formatter_Line.html) | 文本方式格式化信息 |
| [Phalcon\\Logger\\Formatter\\Firephp](http://docs.iphalcon.cn/api/Phalcon_Logger_Formatter_Firephp.html) | Formats the messages so that they can be sent to FirePHP |
| [Phalcon\\Logger\\Formatter\\Json](http://docs.iphalcon.cn/api/Phalcon_Logger_Formatter_Json.html) | 使用JSON格式格式化信息 |
| [Phalcon\\Logger\\Formatter\\Syslog](http://docs.iphalcon.cn/api/Phalcon_Logger_Formatter_Syslog.html) | 使用系统提供的格式格式化信息 |
### 行格式化处理(Line Formatter)
使用单行格式格式化信息。 默认的格式如下:
~~~
[%date%][%type%] %message%
~~~
我们可以使用`setFormat()`来设置自定义格式。 下面是格式变量:
| 变量 | 描述 |
| --- | --- |
| %message% | 待记录的日志消息 |
| %date% | 消息添加的时间 |
| %type% | 消息类型(使用大写) |
下面的例子中展示了如何修改日志格式:
~~~
<?php
use Phalcon\Logger\Formatter\Line as LineFormatter;
$formatter = new LineFormatter("%date% - %message%");
// 修改日志格式
$logger->setFormatter($formatter);
~~~
### 自定义格式处理(Implementing your own formatters)
若要实现自定义的格式则要实现[Phalcon\\Logger\\FormatterInterface](http://docs.iphalcon.cn/api/Phalcon_Logger_FormatterInterface.html)接口, 这样才能扩展已有的格式或创建自定义的格式
## 适配器(Adapters)
下面的例子中展示了每种适配器的简单用法:
### 数据流日志记录器(Stream Logger)
系统日志保存消息到一个已注册的有效的PHP流中。 这里列出了可用的流: here `\_:
~~~
<?php
use Phalcon\Logger\Adapter\Stream as StreamAdapter;
// 使用zlib压缩流
$logger = new StreamAdapter("compress.zlib://week.log.gz");
// 发送消息到stderr
$logger = new StreamAdapter("php://stderr");
~~~
### 文件日志记录器(File Logger)
文件适配器保存所有的日志信息到普通的文件中。 默认情况下日志文件使用添加模式打开,打开文件后文件的指针会指向文件的尾端。 如果文件不存在,则会尝试创建。 我们可以通过传递附加参数的形式来修改打开的模式:
~~~
<?php
use Phalcon\Logger\Adapter\File as FileAdapter;
// 使用写模式打开
$logger = new FileAdapter(
"app/logs/test.log",
[
"mode" => "w",
]
);
~~~
### Syslog 日志记录器(Syslog Logger)
使用系统日志适配器。 由于操作系统的不同得到的日志也不尽相同:
~~~
<?php
use Phalcon\Logger\Adapter\Syslog as SyslogAdapter;
// 基本用法
$logger = new SyslogAdapter(null);
// Setting ident/mode/facility 参数设置
$logger = new SyslogAdapter(
"ident-name",
[
"option" => LOG_NDELAY,
"facility" => LOG_MAIL,
]
);
~~~
### FirePHP 日志记录器(FirePHP Logger)
This logger sends messages in HTTP response headers that are displayed by[FirePHP](http://www.firephp.org/), a[Firebug](http://getfirebug.com/)extension for Firefox.
~~~
<?php
use Phalcon\Logger;
use Phalcon\Logger\Adapter\Firephp as Firephp;
$logger = new Firephp("");
$logger->log(
"This is a message"
);
$logger->log(
"This is an error",
Logger::ERROR
);
$logger->error(
"This is another error"
);
~~~
### 自定义适配器(Implementing your own adapters)
如果开发者想自定义新的日志组件则需实现此接口:[Phalcon\\Logger\\AdapterInterface](http://docs.iphalcon.cn/api/Phalcon_Logger_AdapterInterface.html)。
- 简介
- 安装
- 安装(installlation)
- XAMPP下的安装
- WAMP下安装
- Nginx安装说明
- Apache安装说明
- Cherokee 安装说明
- 使用 PHP 内置 web 服务器
- Phalcon 开发工具
- Linux 系统下使用 Phalcon 开发工具
- Mac OS X 系统下使用 Phalcon 开发工具
- Windows 系统下使用 Phalcon 开发工具
- 教程
- 教程 1:让我们通过例子来学习
- 教程 2:INVO简介
- 教程 3: 保护INVO
- 教程4: 使用CRUD
- 教程5: 定制INVO
- 教程 6: Vökuró
- 教程 7:创建简单的 REST API
- 组件
- 依赖注入与服务定位器
- MVC架构
- 使用控制器
- 使用模型
- 模型关系
- 事件与事件管理器
- Behaviors
- 模型元数据
- 事务管理
- 验证数据完整性
- Workingwith Models
- Phalcon查询语言
- 缓存对象关系映射
- 对象文档映射 ODM
- 使用视图
- 视图助手
- 资源文件管理
- Volt 模版引擎
- MVC 应用
- 路由
- 调度控制器
- Micro Applications
- 使用命名空间
- 事件管理器
- Request Environmen
- 返回响应
- Cookie 管理
- 生成 URL 和 路径
- 闪存消息
- 使用 Session 存储数据
- 过滤与清理
- 上下文编码
- 验证Validation
- 表单_Forms
- 读取配置
- 分页 Pagination
- 使用缓存提高性能
- 安全
- 加密与解密 Encryption/Decryption
- 访问控制列表
- 多语言支持
- 类加载器 Class Autoloader
- 日志记录_Logging
- 注释解析器 Annotations Parser
- 命令行应用 Command Line Applications
- Images
- 队列 Queueing
- 数据库抽象层
- 国际化
- 数据库迁移
- 调试应用程序
- 单元测试
- 进阶技巧与延伸阅读
- 提高性能:下一步该做什么?
- Dependency Injection Explained
- Understanding How Phalcon Applications Work
- Api
- Abstract class Phalcon\Acl