ホームページ >バックエンド開発 >PHPチュートリアル >YII Framework チュートリアル、yiiframework_PHP チュートリアルでのログの使用方法の詳細な説明
この記事では、YII Framework フレームワークのログの使用方法を例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
ログの役割(1000字以下省略)
YII のログは非常に優れており、強力です。ログ情報をデータベースに保存したり、指定したメールに送信したり、ファイルに保存したり、意見ページを表示したり、パフォーマンス分析に使用したりすることができます。
YII のログの基本設定:/yii_dev/testwebap/protected/config/main.php
リーリーYII でのログの基本的な使用法:
YII が提供する Yii::log と Yii::trace を通じてログ情報を出力できます。両者の違いは定義を見ると理解できます。
関数定義
リーリー$msg: 出力したいログ情報
$category: ログ情報が属するカテゴリ
$level: ログ情報のレベル:
const LEVEL_TRACE='trace'; プログラムの実行プロセスを追跡するためにデバッグ環境で使用されます
const LEVEL_WARNING='警告';
const LEVEL_ERROR='error';致命的なエラー メッセージ
const LEVEL_INFO='info';一般的なプロンプト情報
const LEVEL_PROFILE='profile';パフォーマンスのデバッグ情報
リーリー
YIIのログの出力場所
上で述べたように、YII のログの出力場所はさまざまな場所に定義できます。主に構成ファイルを通じて変更されます。例:リーリー
ログファイルだけでなくWebページにも出力します。設定ファイル内:
routes はログ出力の場所を構成するために使用されます。
class は log、ログルーティングのクラス名です
レベルはログの最上位レベルであり、分割しやすい一連の文字列です。具体的には CLooger の定数に対応します
注意:
ログファイルの保存場所は:/yii_dev/testwebap/protected/runtime/application.logです公式ログは非常に詳細ですが、後半の中国語訳がありません。翻訳は次のとおりです。
Yii は柔軟でスケーラブルなロギング機能を提供します。記録されたログは、ログレベルや情報分類ごとに分類できます。レベルとカテゴリのフィルターを使用すると、選択した情報をファイル、電子メール、ブラウザ ウィンドウなどのさまざまな宛先にさらにルーティングできます。
1. 情報記録
情報は Yii::log または Yii::trace を通じて記録できます。違いは、後者はアプリケーションがデバッグ モードで実行されている場合にのみ情報をログに記録することです。リーリー
情報を記録するときは、そのカテゴリとレベルを指定する必要があります。カテゴリはパスエイリアスと同様の形式の文字列です。 たとえば、メッセージが CController に記録されている場合、分類として system.web.CController を使用できます。情報レベルは次のいずれかの値である必要があります:
trace: これは Yii::trace で使用されるレベルです。開発中にプログラムの実行フローを追跡するために使用されます。
info: これは一般的な情報を記録するために使用されます。
プロフィール: 公演概要(プロフィール)です。さらに詳しい手順については、後ほど説明します。
warning: これは警告メッセージに使用されます。
error: これは致命的なエラー メッセージに使用されます。
2. 情報ルーティング
Yii::log または Yii::trace を通じて記録された情報はメモリに保存されます。 通常、それらをブラウザ ウィンドウに表示するか、ファイルや電子メールなどの永続ストレージに保存する必要があります。これはメッセージ ルーティングと呼ばれます。つまり、メッセージをさまざまな宛先に送信します。Yii では、情報ルーティングは CLogRouter と呼ばれるアプリケーションコンポーネントによって管理されます。 ログルーティングと呼ばれる一連の管理を担当します。各ログ ルートは個別のログの宛先を表します。ログ ルートを通じて送信されたメッセージは、レベルとカテゴリによってフィルタリングされます。
メッセージ ルーティングを使用するには、CLogRouter アプリケーション コンポーネントをインストールしてプリロードする必要があります。また、必要なログ ルートのルート属性を設定する必要もあります。 以下のコードは、必要なアプリケーション構成の例を示しています:
リーリー
上記の例では、2 つのログ ルートを定義しました。 1 つ目は CFileLogRoute で、アプリケーションのランタイム ディレクトリにあるファイルに情報を保存します。 また、レベル トレースまたはシステムで始まる情報とカテゴリを含む情報のみが保存されます。 2 番目のルートは CEmailLogRoute で、指定された電子メール アドレスに情報を送信します。エラーまたは警告レベルの情報のみが送信されます。Yii では、次のログルートが利用可能です:
CDbLogRoute: 将信息保存到数据库的表中。
CEmailLogRoute: 发送信息到指定的 Email 地址。
CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
CWebLogRoute: 将 信息 显示在当前页面的底部。
CProfileLogRoute: 在页面的底部显示概述(profiling)信息。
信息: 信息路由发生在当前请求周期最后的 onEndRequest 事件触发时。 要显式终止当前请求过程,请调用 CApplication::end() 而不是使用 die() 或 exit(),因为 CApplication::end() 将会触发onEndRequest 事件, 这样信息才会被顺利地记录。
3. 信息过滤
正如我们所提到的,信息可以在他们被发送到一个日志路由之前通过它们的级别和分类过滤。 这是通过设置对应日志路由的 levels 和 categories 属性完成的。 多个级别或分类应使用逗号连接。
由于信息分类是类似 xxx.yyy.zzz 格式的,我们可以将其视为一个分类层级。 具体地,我们说 xxx 是 xxx.yyy的父级,而xxx.yyy 又是 xxx.yyy.zzz 的父级。 这样我们就可以使用 xxx.* 表示分类 xxx 及其所有的子级和孙级分类
4. 记录上下文信息
从版本 1.0.6 起,我们可以设置记录附加的上下文信息, 比如 PHP 的预定义变量(例如 $_GET, $_SERVER),session ID,用户名等。 这是通过指定一个日志路由的 CLogRoute::filter属性为一个合适的日志过滤规则实现的。
The framework comes with the convenient CLogFilter that may be used as the needed log filter in most cases. By default, CLogFilter will log a message with variables like $_GET, $_SERVER which often contains valuable system context information. CLogFilter can also be configured to prefix each logged message with session ID, username, etc., which may greatly simplifying the global search when we are checking the numerous logged messages.
框架可能在许多数情况下会用到日志过滤器CLogFilter来过滤日志。默认情况下,CLogFilter日志消息包含了许多系统上下文信息的变量,像$ _GET,$_SERVER。 CLogFilter也可以配置的前缀与会话ID,用户名等,我们在检查无数记录的消息每个记录的消息时,这可能会极大地简化了搜索难度
The following configuration shows how to enable logging context information. Note that each log route may have its own log filter. And by default, a log route does not have a log filter.
下面的配置显示了如何启用日志记录的上下文信息。请注意,每个日志路由可能有其自己的日志过滤器。 默认情况下,日志路由不会有日志筛选器。
array( ...... 'preload'=>array('log'), 'components'=>array( ...... 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CFileLogRoute', 'levels'=>'error', 'filter'=>'CLogFilter', ), ...other log routes... ), ), ), )
Starting from version 1.0.7, Yii supports logging call stack information in the messages that are logged by calling Yii::trace. This feature is disabled by default because it lowers performance. To use this feature, simply define a constant named YII_TRACE_LEVEL at the beginning of the entry script (before includingyii.php) to be an integer greater than 0. Yii will then append to every trace message with the file name and line number of the call stacks belonging to application code. The number YII_TRACE_LEVEL determines how many layers of each call stack should be recorded. This information is particularly useful during development stage as it can help us identify the places that trigger the trace messages.
从版本1.0.7开始,Yii的日志记录可以采用堆栈的方式记录消息,此功能默认是关闭的,因为它会降低性能。要使用此功能,只需在入口脚本(前includingyii.php)定义一个命名为YII_TRACE_LEVEL的常量即一个大于0的整数。 Yii将在堆栈信息中追加应用程序要到的每一个文件名和行号。可以通过设置YII_TRACE_LEVEL来设定堆栈的层数。这种方式在开发阶段特别有用,因为它可以帮助我们确定触发跟踪消息的地方。
5. Performance Profiling 性能分析
Performance profiling is a special type of message logging. Performance profiling can be used to measure the time needed for the specified code blocks and find out what the performance bottleneck is.
性能分析是一类特殊类型的消息记录。性能分析可用于测量指定代码块所需的时间,并找出性能瓶颈是什么。
To use performance profiling, we need to identify which code blocks need to be profiled. We mark the beginning and the end of each code block by inserting the following methods:
要使用性能分析日志,我们需要确定哪些代码块需要分析。我们要在分析性能的代码短的开始和结尾添加如下方法:
Yii::beginProfile('blockID'); ...code block being profiled... Yii::endProfile('blockID');
where blockID is an ID that uniquely identifies the code block.
其中blockID是一个标识代码块的唯一ID。
Note, code blocks need to be nested properly. That is, a code block cannot intersect with another. It must be either at a parallel level or be completely enclosed by the other code block.
注意,这些方法不能交叉嵌套
To show profiling result, we need to install a CLogRouter application component with a CProfileLogRoute log route. This is the same as we do with normal message routing. The CProfileLogRoute route will display the performance results at the end of the current page.
为了显示分析结果,我们需要为CLogRouter增加CProfileLogRoute路由。然后通过CProfileLogRoute可以把性能测试结果显示在当前页面结束。
6. Profiling SQL Executions 分析SQL执行
Profiling is especially useful when working with database since SQL executions are often the main performance bottleneck of an application. While we can manually insert beginProfile and endProfilestatements at appropriate places to measure the time spent in each SQL execution, starting from version 1.0.6, Yii provides a more systematic approach to solve this problem.
在数据库开发中分析是特别有用的,因为SQL执行往往是应用程序的主要性能瓶颈。尽管我们可以手动在每个SQL执行的适当的地方插入beginProfile和endProfile来衡量花费的时间,但从1.0.6版本开始,Yii提供了更系统的方法来解决这个问题。
By setting CDbConnection::enableProfiling to be true in the application configuration, every SQL statement being executed will be profiled. The results can be readily displayed using the aforementionedCProfileLogRoute, which can show us how much time is spent in executing what SQL statement. We can also call CDbConnection::getStats() to retrieve the total number SQL statements executed and their total execution time.
再实际的应用程序当中通过设置CDbConnection::enableProfiling爱分析每一个正在执行的SQL语句。使用 CProfileLogRoute,结果可以很容易地显示。它可以显示我们是在执行什么SQL语句花费多少时间。我们也可以调用CDbConnection:getStats()来分析检索SQL语句的执行总数和其总的执行时间。
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。