封装了__CLASS__、__METHOD__、__LINE__在一个方法,在另一个类里调用方法,显示的不是调用方法的类的类名、方法名、行数。怎么解决?

解决方案 »

  1.   

    <?php
    final class LogWrite
    {
        private static $_logpattern = '#%s#%s#%s#%s';
        private static $_logleveltetn = '';
        private static $_envtern;    const DEBUGFAG = 'DEBUG';
        const INFOFAG = 'INFO';
        const WARNINGFAG = 'WARNING';
        const FATALFAG = 'FATAL';    private static function _write($msg, $levelflag)
        {
            if (!is_dir(self::$_logleveltetn)) {
                mkdir(self::$_logleveltetn, 0777, true);
            }        $log_file = self::$_logleveltetn. 'cgi-' .date("Ymd", time()). '.txt';
            $string = sprintf(self::$_logpattern, $levelflag, date('Y-m-d'), getmypid(), $msg);
            $arr = debug_backtrace()[1];//        error_log('['.__CLASS__.']['.__METHOD__.']['.__LINE__."]:$string".PHP_EOL, 3, $log_file);
            error_log(print_r($arr,true).$string.PHP_EOL, 3, $log_file);
        }    public static function setLogOutputPath()
        {
            self::$_logleveltetn = Register::get('_gConfigs')['LOG_PATH'];
        }    public static function debug ($msg)
        {
            static::$_envtern = Register::get('_gConfigs')['ENV'];
            if (static::$_envtern == 'release') {
                return false;
            }
            self::setLogOutputPath();
            self::_write($msg, self::DEBUGFAG);    }    public static function info($msg)
        {
    //        error_log(static::class, 3, '/tmp/abc.log');
            self::setLogOutputPath();
            self::_write($msg, self::INFOFAG);
        }    public static  function warning($msg)
        {
            self::setLogOutputPath();
            self::_write($msg, self::WARNINGFAG);
        }    public static  function fatal($msg)
        {
            self::setLogOutputPath();
            self::_write($msg, self::FATALFAG);
        }
    }