事務員、プログラマーになる

事務員がプログラマーになりました。

IDEのコンソールにログを出したい

NetBeansを使って開発をしています。
先日、Javaという言語で開発している友人の環境を見せてもらうと、eclipseというIDEを使っていました。
eclipseIDEの下側に(コンソールというらしい)にログが出るんですよ。

頭の足りない私は、自分が書いたSQL等を幾度となく見失っておりまして。
先月MY_DB_query_builderを作成したときに身に着けた知識を生かして、SQLの実行時に変数とかが置き換わった後の実実行SQLデバッグログに出すようにしています。

ログファイルは日付で変わるので、探して開くの地味に面倒。
だからeclipseのコンソールにときめいたわけです。

NetBeansでデバッガ・コンソールを表示とやると、コンソールにはHTMLが出力されてしまい、CodeIgniterのログは出てくれません。
しばらくウンウン悩んだんですが、 ログファイルはNetBeansで開いたままでもどんどん追記される ことから、ログファイルをまるでコンソールのような顔で開けばいいじゃない!という結論に至りました。
↓こんな感じ。

f:id:system_ajisai:20170323171400p:plain

これを実現するためには、ファイルの日付が変わってもらってはこまります。

Logを出しているのはLog.phpというクラスのようだったので、これをMY_Log.phpとして拡張しました。 拡張ファイルは今まで通り、application\coreフォルダの下に配置。

write_logファンクションから、まずはファイル名を確定しているところを書き換えます。
忘れたまま本番環境に入れてしまうと怖いので、開発環境(私しか開発してない)だけ変わるようにしてみました。

  $filepath = $this->_log_path.'log-'.date('Y-m-d').'.'.$this->_file_ext;
  // 処理追加
  if(ENVIRONMENT == "development"){
     $filepath = $this->_log_path.'log_debug.'.$this->_file_ext;
  }

このままではlog_debugファイルがエラいサイズになってしまうので、2Mぐらいでバックアップしてくれるように書き加えます。

if ( ! file_exists($filepath))
{
    $newfile = TRUE;
    // Only add protection to php files
    if ($this->_file_ext === 'php')
    {
        $message .= "<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>\n\n";
    }
    
// 2017-03-23 add
} else {
    if( filesize($filepath) > 2097152 ){
        $backup_file = $this->_log_path.date('Y-m-d_His').'.php';
        copy($filepath, $backup_file);
        $newfile = TRUE;
    }
}

後ろの処理が実はよくわからなかったのですが、$newfile=TRUEにしておけば良きに計らってくれるようです。

これでログファイルをまるでコンソールのような顔で開いておけばあとはいい感じに計らってくれるようになりました。
悩みはログが更新されても一番下までスクロールしてくれないことですが・・・世の中妥協も必要ですね。