ホームページ  >  記事  >  バックエンド開発  >  PHP の Yii フレームワークにおける関連する設定とログの使用について

PHP の Yii フレームワークにおける関連する設定とログの使用について

不言
不言オリジナル
2018-06-19 14:42:521370ブラウズ

この記事では主に、バグ追跡やデータベースクエリに時間のかかるレコードなど、PHP の Yii フレームワークにおけるログの関連設定と使用法について紹介します。必要な友人は参照してください。

デフォルトのログが出力されます。 protected/runtime/application.log

これを変更する必要がある場合は、次のように main.php のコンポーネントの下にログ構成を追加する必要があります:

'preload' => array('log'),//这句也必须加上

'components' => array( 
    'log'=>array( 
      'class'=>'CLogRouter', 
      'routes'=>array(
        //这是一个文件route表示category为test开头的所有类型的输出都会记录到runtime/test.log下面 
         array( 
           'class'=>'CFileLogRoute', 
           'levels'=>'trace, info, debug, warn, error, fatal, profile', 
           'categories'=>'test.*', 
           'maxFileSize'=>1048576,//单文件最大1G 
           'logFile'=>'test.log', 
         ), 
         // 
 
//        开发过程中所有日志直接输出到浏览器了,这样不需要登录服务器看日志了  

           
         array( 
          'class' => 'CWebLogRoute', 
          'categories' => 'test.*', 
          'levels' => CLogger::LEVEL_PROFILE, 
          'showInFireBug' => true, 
          'ignoreAjaxInFireBug' => true, 
        ), 
        array( 
          'class' => 'CWebLogRoute', 
          'categories' => 'test.* ', 
        ), 

        array( 
          'class'=>'CEmailLogRoute', 
          'levels'=>'error, warning', 
          'emails'=>'admin@example.com', 
        ), 
      ), 
    ), 
 
  ),

If Yii::log("jdkshgds","info",'test.xx');

このログは、まずメモリ内の CLogger クラスの配列に記録され、次に各 LogRoute は 1 つずつ判断され、出力が必要かどうかが判断されます。1 つが出力され、次が無視されるわけではありません。

上記の構成を例に挙げます。

最初の CFileLogRoute、'categories'=>'test.*'、レベルには情報が含まれており、test.xx は条件を満たしているため、実行して、このログを test.log に出力し、次に CWebLogRoute、'levels' => CLogger::LEVEL_PROFILE、を出力します。そして、このログは情報であるため、次の CWebLogRoute、'categories' => 'test.* '、レベルが指定されていない、つまりフィルタリングがないため、これも実行されます。ブラウザにログが出力されます。

#2. プロファイル関数
さらに、ロガーには、profile,

Yii::beginProfile('blockID');
...code block being profiled...
Yii::endProfile('blockID');

## という非常に強力な関数もあります。 # このようにして、このコード ブロックの実行効率をテストでき、非常に便利です。

さらに詳しい設定ビュー: http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute

次に、非常にバグの多い関数、Profiling SQL Executions

多くの場合、SQL ステートメントの作成が不十分であると効率に大きな影響を及ぼしますが、どのステートメントが効率に影響を与えるかを判断するにはプロファイリングが必要です。 YII は、このバグレベルの機能も提供します。

3. Yii::log() と Yii::trace() の使用

最初に設定ファイルにログを設定します

'log'=>array(
  'class'=>'CLogRouter',
  'routes'=>array(
    array(
      'class'=>'CFileLogRoute',//这表示把日志输出到文件中,下方有详细的
      'levels'=>'error, warning',
    ),
    array(
      'class'=>'CWebLogRoute',//这表示把日志显示在网页下方,下方有详细的
      'levels'=>'trace, info, error, warning',
      'categories'=>'cool.*,system.db.*',
    ),
  ),
),

ログ ルーティング クラス:

    CDbLogRoute: 情報をデータベース テーブルに保存します。
  • CEmailLogRoute: 指定された電子メール アドレスに情報を送信します。
  • CFileLogRoute: アプリケーションのランタイム ディレクトリ内のファイルに情報を保存します。
  • CWebLogRoute: 現在のページの下部に情報を表示します。
  • CProfileLogRoute: ページの下部にプロファイリング情報が表示されます。
  • 情報レベル レベル:

    trace: これは Yii::trace で使用されるレベルです。開発中にプログラムの実行フローを追跡するために使用されます。
  • info: これは通常の情報を記録するために使用されます。
  • profile: パフォーマンスの概要 (プロフィール) です。さらに詳しい手順については、後ほど説明します。
  • warning: これは警告メッセージに使用されます。
  • error: これは致命的なエラー メッセージに使用されます。
  • カテゴリ:

カスタマイズ可能ですが、出力関数で対応する場合にのみログ

に書き込まれます (たとえば、cool が書き込まれます)上記の * と system.db.* を実行すると、該当するカテゴリの情報がログに書き込まれます。以下と合わせてご理解ください。)


設定が完了すると、この機能を使用できるようになります。記録するログを書き込みます:

Yii::trace('My log message.','cool.pd');
//cool.pd属于cool.*分类,所以会被写入日志
Yii::log('My log message.','info','cool.collectpd');
//log定义级别为info,结合上文,第一个logclass会忽略,不会被写入文件,但会被第二个logclass接收,写入日志在网络下方显示。

trace() と log() の違い:

trace() はデバッグ モード、つまりデバッグが有効な場合にのみ有効です。

trace() をオンにするとレベルが区別されませんが、log() はレベル パラメータを設定できます

4 SQL クエリの各ステートメントの実行にかかる時間をデバッグします

設定のログの下に次のルートを追加します

//这个配置专门负责数据库操作的profile 
array( 
    'class'=>'CProfileLogRoute', 
    'levels' => CLogger::LEVEL_PROFILE, 
    'showInFireBug' => true, 
    'ignoreAjaxInFireBug' => true, 
    'categories' => 'system.db.* ', //只记录db的操作日志,其他的忽略 
),

次に、コントローラーのアクションに追加します:

Yii::beginProfile('db', 'pocketpet'); 
for($i=0;$i<1000;$i++){ 
   $user = UserModel::model()->findByPk("1");//这里只要是数据库操作就行,这个只是个例子 
}

Yii::endProfile(' db', 'pocketpet');

ブラウザでこのアクションにアクセスするには、最初に firebug を開くことを忘れないでください。そうすれば、レコードが次のように表示されます。以下の firebug の例:


2015128153707541.jpg (600×83)同じクエリが分類され、合計と平均が計算されますが、これは分析に非常に役立ちます。

DB ログをファイルに書き込むこともできます。構成は次のとおりです (推奨されません。ブラウザで firebug を使用する方が便利です):

array( 
  &#39;class&#39;=>&#39;CFileLogRoute&#39;, 
  &#39;levels&#39; => CLogger::LEVEL_PROFILE, 
  &#39;categories&#39; => &#39;system.db.* &#39;, //只记录db的操作日志,其他的忽略 
  &#39;logFile&#39;=>&#39;db.log&#39;, 
),

もちろん、有効にするには、次の 2 つの設定手順が必要です:

1. 次の設定を必ず Index.php に追加してください。

$yii = dirname(__FILE__).&#39;/../yii/framework/yii.php&#39;;
$config = dirname(__FILE__).&#39;/protected/config/main.php&#39;;

defined(&#39;YII_DEBUG&#39;) or define(&#39;YII_DEBUG&#39;,true);

defined(&#39;YII_DEBUG_SHOW_PROFILER&#39;) or define(&#39;YII_DEBUG_SHOW_PROFILER&#39;,true);
//enable profiling
defined(&#39;YII_DEBUG_PROFILING&#39;) or define(&#39;YII_DEBUG_PROFILING&#39;,true);
//trace level
defined(&#39;YII_TRACE_LEVEL&#39;) or define(&#39;YII_TRACE_LEVEL&#39;,3);
//execution time
defined(&#39;YII_DEBUG_DISPLAY_TIME&#39;) or define(&#39;YII_DEBUG_DISPLAY_TIME&#39;,false);
require_once($yii);
Yii::createWebApplication($config)->run();

2. main.php メイン設定ファイルのコンポーネント db

&#39;components&#39; => array(
&#39;db&#39; => array(
    &#39;enableProfiling&#39; => true, //这个是用来记录日志的,会记录每一条语句执行的时间
    &#39;enableParamLogging&#39; => true,//true表示包括sql语句的参数在内的信息都会记录到日志里,非常详细
  ),
)

## で、enableProfiling を true に設定します。 #以上がこの記事の全内容です。学習が役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP の Yii フレームワークでの一般的なログ操作について

PHP の Yii フレームワークのログ機能について


以上がPHP の Yii フレームワークにおける関連する設定とログの使用についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。