tohokuaikiのチラシの裏

技術的ネタとか。

簡単なバックトレース

なんか毎回作ってる気がしたので、ぺた。

<?php
function jlog()
{
    static $fp;
    $logfile = sprintf('%s/j_debug_%s.log',
                       dirname(__FILE__), date('Ymd'));
    if (is_null($fp)){
        $fp = fopen($logfile, 'a+');
        chmod($logfile, 0666);
    }
    
    $args = func_get_args();
    $msgs = array();
    foreach ($args as $a){
        $msgs[] = is_array($a) || is_object($a) ? var_export($a, true) : $a ;
    }
    $msg = implode(", ", $msgs);
    
    $log = "[".date("Y/m/d H:i:s")."]\t";
    $bt = debug_backtrace();
    $bt = array_reverse($bt);
    foreach ($bt as $k=>$v){
        if ($k == count($bt) -1) break;
        $log .= sprintf("[File:%s] %s%s (%d)\n", 
                        $bt[$k+1]['file'], 
                        $bt[$k]['class'] ? $bt[$k]['class'] . $bt[$k]['type'] : '',
                        $bt[$k]['function'],
                        $bt[$k+1]['line']
                        );
    }
    $log .= $msg."\n";
    fputs($fp, $log);
}