Yii日志使用
Yii 提供了一个灵活可扩展的日志功能。记录的日志 可以通过日志级别和信息分类进行归类。通过使用 级别和分类过滤器,所选的信息还可以进一步路由到 不同的目的地,例如一个文件,Email,浏览器窗口等。
信息可以通过 Yii::log 或 Yii::trace 记录。其 区别是后者只在当应用程序运行在 调试模式(debug mode) 中时才会记录信息。
Yii::log($message, $level, $category);
Yii::trace($message, $category);
当记录信息时,我们需要指定它的分类和级别 分类是一段格式类似于 路径别名 的字符串。 例如,如果一条信息是在 CController 中记录的,我们可以使用 system.web.CController 作为分类。信息级别应该是下列值中的一种:
trace: 这是在 Yii::trace 中使用的级别。它用于在开发中 跟踪程序的执行流程。info: 这个用于记录普通的信息。profile: 这个是性能概述(profile)。下面马上会有更详细的说明。warning: 这个用于警告(warning)信息。error: 这个用于致命错误(fatal error)信息。
2. 信息路由
通过 Yii::log 或 Yii::trace 记录的信息是保存在内存中的。 我们通常需要将它们显示到浏览器窗口中,或者将他们保存到一些 持久存储例如文件、Email中。这个就叫作 信息路由,例如, 发送信息到不同的目的地。
在 Yii 中,信息路由是由一个叫做 CLogRouter 的应用组件管理的。 它负责管理一系列称作 日志路由 的东西。每个日志路由 代表一个单独的日志目的地。通过一个日志路由发送的信息会被他们的级别和分类过滤。
要使用信息路由,我们需要安装并预加载一个 CLogRouter 应用组件。我们也还需要配置它的 routes 属性为我们想要的那些日志路由。 下面的代码演示了一个所需的 应用配置 示例:
array(
......
'preload'=>array('log'),
'components'=>array(
......
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info',
'categories'=>'system.*',
),
array(
'class'=>'CEmailLogRoute',
'levels'=>'error, warning',
'emails'=>'admin@example.com',
),
),
),
),
)
在上面的例子中,我们定义了两个日志路由。第一个是 CFileLogRoute ,它会把信息保存在位于应用程序 runtime 目录中的一个文件中。 而且只有级别为 trace 或 info 、分类以 system. 开头的信息才会被保存。 第二个路由是 CEmailLogRoute ,它会将信息发送到指定的 email 地址,且只有级别为 error 或 warning 的才会发送。
在 Yii 中,有下列几种日志路由可用:
- CDbLogRoute: 将信息保存到数据库的表中。
- CEmailLogRoute: 发送信息到指定的 Email 地址。
- CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
- CWebLogRoute: 将 信息 显示在当前页面的底部。
- CProfileLogRoute: 在页面的底部显示概述(profiling)信息。
3. 信息过滤
正如我们所提到的,信息可以在他们被发送到一个日志路由之前通过它们的级别和分类过滤。 这是通过设置对应日志路由的 levels 和 categories 属性完成的。 多个级别或分类应使用逗号连接。
由于信息分类是类似 xxx.yyy.zzz 格式的,我们可以将其视为一个分类层级。 具体地,我们说 xxx 是 xxx.yyy的父级,而xxx.yyy 又是 xxx.yyy.zzz 的父级。 这样我们就可以使用 xxx.* 表示分类 xxx 及其所有的子级和孙级分类。
public function actionTest()
{
Yii::log("this is a info log",'info','userlog');
}
array(
'class'=>'CFileLogRoute',
'levels'=>'trace,info',
'categories'=>'userlog',
'logFile'=>'log.txt',
),
运行时在runtime目录下生产log.txt文件:内容为:
2014/03/31 21:49:23 [info] [userlog] this is a info log
in F:\xampp\htdocs\php\yiiblog2\protected\controllers\LogController.php (6)
in F:\xampp\htdocs\php\yiiblog2\index.php (14)
可以配置那里增加一个'runtimePath' => 目录/'tmp/',
日志文件就会放在这里了。
array(
'class' =>'CFileLogRoute',
'levels'=>CLogger::LEVEL_ERROR,
'logFile'=>'error.txt',
'maxFileSize' => '1024',
),
错误会输出到error。txt文件里。
一篇文章:
一直对Yii文件日志的配置没有关注,基本上都是默认配置,最近发现所有日志都写在一个文件里,并且日志文件都保存在Yii项目的runtime目录下,查看非常不方便,于是想将不同类型的日志进行拆分,并且单独放入空间较大的数据盘,稍微看了一下Yii的文件日志类,测试了一下相关配置,觉得配置还挺方便的,记录下来:
在main.php文件中,配置日志的地方
配置:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning, info',
'categories'=> 'application.*',//日志文件分类,只有调用时使用了appplication都会默认写入默认文件application.log
'logPath'=>'/mnt/php/logs', //日志文件路径 要用绝对路径,
'maxFileSize'=>5120,//日志大小
'maxLogFiles'=>20,//保存最大个数,Yii会按时间保留最近20个文件
),
array(
'class' => 'CFileLogRoute',
'levels' => 'error, warning,info',
'categories'=> 'db.*',//日志文件分类,db相关
'logFile'=> 'db.log',//保存数据库操作相关日志
'logPath'=>'/mnt/php/logs', //日志文件路径
'maxFileSize'=>5120,//日志大小5M,以kb为单位的
'maxLogFiles'=>20,
),
array(
'class' => 'CFileLogRoute',
'levels' => 'trace',
'categories'=> 'debug.*',
'logFile'=> 'debug.log',//保存debug日志
'logPath'=>'/mnt/php/logs',
'maxFileSize'=>5120,
'maxLogFiles'=>20,
),
)
), 调用:
//默认写入application.log
Yii::log($content,CLogger::LEVEL_INFO);
//将$content写入/mnt/php/logs/debug.log,级别为trace
Yii::log($content,CLogger::LEVEL_TRACE,'debug');
//以下三种写法都会将$content写入/mnt/php/logs/db.log,并且在每行日志前面会使用db.model1,
//db.model2,db.model3区分,级别均为error
Yii::log($content,CLogger::LEVEL_ERROR,'db.model1');
Yii::log($content,CLogger::LEVEL_ERROR,'db.model2');
Yii::log($content,CLogger::LEVEL_ERROR,'db.model3'); 源码:framework/logging/CFileLogRoute.php
/**
* @var integer maximum log file size
*/
private $_maxFileSize=1024; // in KB
/**
* @var integer number of log files used for rotation
*/
private $_maxLogFiles=5;
/**
* @var string directory storing log files
*/
private $_logPath;
/**
* @var string log file name
*/
private $_logFile='application.log'; 这几个参数都提供了get和set方法,所以可以在配置里面配置即可 另外一些参数可以参考父类:framework/logging/CLogRoute.php
/**
* @var string list of levels separated by comma or space. Defaults to empty, meaning all levels.
*/
public $levels='';
/**
* @var mixed array of categories, or string list separated by comma or space.
* Defaults to empty array, meaning all categories.
*/
public $categories=array(); 应该还有一些可以配置,暂时无用到,没做深入研究了
输出包含几个属性:时间 [日志级别] [日志的分类] 日志内容.
参考:http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.logging
更多:http://ljzxzxl.com/201309/website/php-678.html
Yii2日志:
http://www.cnblogs.com/rhythmK/p/4479246.html
Yii日志使用的更多相关文章
- yii日志保存机制
一.修改yii框架的配置文件(main.php) 'log' => array( 'class' => 'CLogRouter', 'routes' => array( array( ...
- Yii日志记录Logging
.Yii::getLogger()->log($message, $level, $category = 'application') .Yii::trace($message, $catego ...
- 干货:yii日志功能详解
转载请注明来自souldak,微博:@evagle 一.基本日志功能 详细的介绍查看官网的document:http://www.yiiframework.com/doc/guide/1.1/en/t ...
- Yii 日志组件
详细的介绍查看官网的document:http://www.yiiframework.com/doc/guide/1.1/en/topics.logging 也可以看 Yii 1.1 Applicat ...
- yii 日志和事件
日志 配置 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log ...
- YII第三步,日志开启
YII第三步,日志开启 index.php入口文件配置: defined('YII_DEBUG') or define('YII_DEBUG',true); cofig/main.php 'prelo ...
- 【Yii系列】错误处理和日志系统
缘起 跟随上一章的脚步,上一章中,我们主要讲解了在用户发起请求,解析请求,服务器反馈请求以及session的一些知识点,这过程中,难免会遇到一些问题,比方说数据库查询失败,用户输入导致脚本出错,网络问 ...
- 关于yii的日志路由组件的配置问题
最近突然意识到日志是很好滴debug工具,所以研究了一下yii的日志配置,想想应该还会有像我这样的小白不懂这些问题的,就分享一下了.有错误烦请大神们指出config/main.php 中配置,这个想必 ...
- <Yii 学习>写入日志
$postStr ='test:'.(empty( $GLOBALS["HTTP_RAW_POST_DATA"])?'':$GLOBALS["HTTP_RAW_POST_ ...
随机推荐
- Visual Studio 2013复制项目
在当前解决方案下复制项目的步骤: 1. 在硬盘存放代码的目录下将整个文件拷贝一份,修改文件夹名字,改成新的项目名称, 然后修改 *.csproj文件,名字必须与新项目名一致. 2. 在解决方案上右键 ...
- log4j的PatternLayout参数含义
参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字空间 ...
- css内容简介(层叠样式表)
css是对网页编辑的加色,是对其功能的渲染. 根据规范每个元素都有一个display属性,每个元素都有一个------------如div元素他的默认为block. 行内元素和块级元素 块级元素会占据 ...
- (转)The remote certificate is invalid according to the validation procedure
If you get “The remote certificate is invalid according to the validation procedure” exception while ...
- .net core 第二篇控制台程序项目初步学习
1. 使用vscode 创建一个控制台程序 创建项目默认创建的项目名称为父级文件夹名称 后面学习下创建的命令各个参数说明 运行项目dotnet run 其他命令SDK 命令:add 将包或引用添加到 ...
- ssm框架文件上传
有两种方法 导包和上传配置自己搞: 第一种: 上传单个文件: @RequestMapping("/addfile1") public String addfile(@Request ...
- poj Corn Fields 状态压缩dp。
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5763 Accepted: 3052 Descr ...
- 第4章 css文字text与字体font-face
text-overflow 与 word-wrap text-overflow:用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 语法: 但是text-overflow只是用来说明文字溢出 ...
- DOM节点常见的属性及操作
(1)常见节点属性 childNodes 子节点 nodeList children 子节点(元素节点) HTMLCollection parentNode 父节点 p ...
- 无法远程访问Mysql的解决方案
现在在很多的互联网公司对于mysql数据库的使用已经是不可阻挡的趋势了,所以经常我们在项目开始的时候就会做的事情就是找一台Linux服务器,到上面去安装个mysql,然后在开始我们的数据表的导入工作, ...