public function log($level, $message, array $context = array()) { // Convert to old $entry array for b/c calls $entry = $context; $entry['type'] = $level; $entry['message'] = $message; // Drush\Log\Logger should take over all of the responsibilities // of drush_log, including caching the log messages and sending // log messages along to backend invoke. // TODO: move these implementations inside this class. $log =& drush_get_context('DRUSH_LOG', array()); $log[] = $entry; drush_backend_packet('log', $entry); if (drush_get_context('DRUSH_NOCOLOR')) { $red = "[%s]"; $yellow = "[%s]"; $green = "[%s]"; } else { $red = "[31;40m[1m[%s][0m"; $yellow = "[1;33;40m[1m[%s][0m"; $green = "[1;32;40m[1m[%s][0m"; } $verbose = drush_get_context('DRUSH_VERBOSE'); $debug = drush_get_context('DRUSH_DEBUG'); switch ($level) { case LogLevel::WARNING: case 'cancel': $type_msg = sprintf($yellow, $level); break; case 'failed': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case 'error': $type_msg = sprintf($red, $level); break; case 'ok': case 'completed': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case 'success': case 'status': // Obsolete; only here in case contrib is using it. // In quiet mode, suppress progress messages if (drush_get_context('DRUSH_QUIET')) { return TRUE; } $type_msg = sprintf($green, $level); break; case 'notice': case 'message': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case 'info': if (!$verbose) { // print nothing. exit cleanly. return TRUE; } $type_msg = sprintf("[%s]", $level); break; default: if (!$debug) { // print nothing. exit cleanly. return TRUE; } $type_msg = sprintf("[%s]", $level); break; } // When running in backend mode, log messages are not displayed, as they will // be returned in the JSON encoded associative array. if (drush_get_context('DRUSH_BACKEND')) { return; } $columns = drush_get_context('DRUSH_COLUMNS', 80); $width[1] = 11; // Append timer and memory values. if ($debug) { $timer = sprintf('[%s sec, %s]', round($entry['timestamp'] - DRUSH_REQUEST_TIME, 2), drush_format_size($entry['memory'])); $entry['message'] = $entry['message'] . ' ' . $timer; } $width[0] = $columns - 11; $format = sprintf("%%-%ds%%%ds", $width[0], $width[1]); // Place the status message right aligned with the top line of the error message. $message = wordwrap($entry['message'], $width[0]); $lines = explode("\n", $message); $lines[0] = sprintf($format, $lines[0], $type_msg); $message = implode("\n", $lines); drush_print($message, 0, STDERR); }
public function log($level, $message, array $context = array()) { // Convert to old $entry array for b/c calls $entry = $context + ['type' => $level, 'message' => $message, 'timestamp' => microtime(TRUE), 'memory' => memory_get_usage()]; // Drush\Log\Logger should take over all of the responsibilities // of drush_log, including caching the log messages and sending // log messages along to backend invoke. // TODO: move these implementations inside this class. $log =& drush_get_context('DRUSH_LOG', array()); $log[] = $entry; if ($level != LogLevel::DEBUG_NOTIFY) { drush_backend_packet('log', $entry); } if (drush_get_context('DRUSH_NOCOLOR')) { $red = "[%s]"; $yellow = "[%s]"; $green = "[%s]"; } else { $red = "[31;40m[1m[%s][0m"; $yellow = "[1;33;40m[1m[%s][0m"; $green = "[1;32;40m[1m[%s][0m"; } $verbose = drush_get_context('DRUSH_VERBOSE'); $debug = drush_get_context('DRUSH_DEBUG'); $debugnotify = drush_get_context('DRUSH_DEBUG_NOTIFY'); switch ($level) { case LogLevel::WARNING: case LogLevel::CANCEL: $type_msg = sprintf($yellow, $level); break; case 'failed': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case LogLevel::EMERGENCY: // Not used by Drush // Not used by Drush case LogLevel::ALERT: // Not used by Drush // Not used by Drush case LogLevel::ERROR: $type_msg = sprintf($red, $level); break; case LogLevel::OK: case 'completed': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case LogLevel::SUCCESS: case 'status': // Obsolete; only here in case contrib is using it. // In quiet mode, suppress progress messages if (drush_get_context('DRUSH_QUIET')) { return TRUE; } $type_msg = sprintf($green, $level); $level = LogLevel::NOTICE; break; case LogLevel::NOTICE: $type_msg = sprintf("[%s]", $level); break; case 'message': // Obsolete; only here in case contrib is using it. // Obsolete; only here in case contrib is using it. case LogLevel::INFO: if (!$verbose) { // print nothing. exit cleanly. return TRUE; } $type_msg = sprintf("[%s]", $level); $level = LogLevel::INFO; break; case LogLevel::DEBUG_NOTIFY: $level = LogLevel::DEBUG; // Report 'debug', handle like 'preflight' // Report 'debug', handle like 'preflight' case LogLevel::PREFLIGHT: if (!$debugnotify) { // print nothing unless --debug AND --verbose. exit cleanly. return TRUE; } $type_msg = sprintf("[%s]", $level); $level = LogLevel::DEBUG; break; case LogLevel::BOOTSTRAP: case LogLevel::DEBUG: default: if (!$debug) { // print nothing. exit cleanly. return TRUE; } $type_msg = sprintf("[%s]", $level); $level = LogLevel::DEBUG; break; } // When running in backend mode, log messages are not displayed, as they will // be returned in the JSON encoded associative array. if (drush_get_context('DRUSH_BACKEND')) { return; } $columns = drush_get_context('DRUSH_COLUMNS', 80); $width[1] = 11; // Append timer and memory values. if ($debug) { $timer = sprintf('[%s sec, %s]', round($entry['timestamp'] - DRUSH_REQUEST_TIME, 2), drush_format_size($entry['memory'])); $entry['message'] = $entry['message'] . ' ' . $timer; } $message = $entry['message']; /* // Drush-styled output $message = $this->interpolate( $message, $this->getLogOutputStyler()->style($context) ); $width[0] = ($columns - 11); $format = sprintf("%%-%ds%%%ds", $width[0], $width[1]); // Place the status message right aligned with the top line of the error message. $message = wordwrap($message, $width[0]); $lines = explode("\n", $message); $lines[0] = sprintf($format, $lines[0], $type_msg); $message = implode("\n", $lines); $this->getErrorStreamWrapper()->writeln($message); */ // Robo-styled output parent::log($level, $message, $context); }