public static function log_bug($arg_arr)
    {
        $program = strtoupper($arg_arr['type'] ?: 'php');
        $level   = self::get_instance()->config->get('debug_level');

        // disable errors for ajax requests, write to log instead (#1487831)
        if (($level & 4) && !empty($_REQUEST['_remote'])) {
            $level = ($level ^ 4) | 1;
        }

        // write error to local log file
        if (($level & 1) || !empty($arg_arr['fatal'])) {
            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                foreach (array('_task', '_action') as $arg) {
                    if ($_POST[$arg] && !$_GET[$arg]) {
                        $post_query[$arg] = $_POST[$arg];
                    }
                }

                if (!empty($post_query)) {
                    $post_query = (strpos($_SERVER['REQUEST_URI'], '?') != false ? '&' : '?')
                        . http_build_query($post_query, '', '&');
                }
            }

            $log_entry = sprintf("%s Error: %s%s (%s %s)",
                $program,
                $arg_arr['message'],
                $arg_arr['file'] ? sprintf(' in %s on line %d', $arg_arr['file'], $arg_arr['line']) : '',
                $_SERVER['REQUEST_METHOD'],
                $_SERVER['REQUEST_URI'] . $post_query);

            if (!self::write_log('errors', $log_entry)) {
                // send error to PHPs error handler if write_log didn't succeed
                trigger_error($arg_arr['message'], E_USER_WARNING);
            }
        }

        // report the bug to the global bug reporting system
        if ($level & 2) {
            // TODO: Send error via HTTP
        }

        // show error if debug_mode is on
        if ($level & 4) {
            print "<b>$program Error";

            if (!empty($arg_arr['file']) && !empty($arg_arr['line'])) {
                print " in $arg_arr[file] ($arg_arr[line])";
            }

            print ':</b>&nbsp;';
            print nl2br($arg_arr['message']);
            print '<br />';
            flush();
        }
    }