Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1396)

Unified Diff: sdk/lib/_internal/pub/lib/src/log.dart

Issue 301063002: First stab at "pub run" command. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add TODO. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/command/serve.dart ('k') | sdk/lib/_internal/pub/lib/src/progress.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/lib/src/log.dart
diff --git a/sdk/lib/_internal/pub/lib/src/log.dart b/sdk/lib/_internal/pub/lib/src/log.dart
index e50d7505f47197fa95dc547458b8fd2ec92ed952..c5e626970f55b2aa39e7b6aecb2a4691bf5a736f 100644
--- a/sdk/lib/_internal/pub/lib/src/log.dart
+++ b/sdk/lib/_internal/pub/lib/src/log.dart
@@ -22,8 +22,8 @@ import 'utils.dart';
/// log.json.error(...);
final json = new _JsonLogger();
-typedef LogFn(Entry entry);
-final Map<Level, LogFn> _loggers = new Map<Level, LogFn>();
+/// The current logging verbosity.
+Verbosity verbosity = Verbosity.NORMAL;
/// In cases where there's a ton of log spew, make sure we don't eat infinite
/// memory.
@@ -54,9 +54,11 @@ final _gray = getSpecial('\u001b[1;30m');
final _none = getSpecial('\u001b[0m');
final _bold = getSpecial('\u001b[1m');
-/// An enum type for defining the different logging levels. By default, [ERROR]
-/// and [WARNING] messages are printed to sterr. [MESSAGE] messages are printed
-/// to stdout, and others are ignored.
+/// An enum type for defining the different logging levels a given message can
+/// be associated with.
+///
+/// By default, [ERROR] and [WARNING] messages are printed to sterr. [MESSAGE]
+/// messages are printed to stdout, and others are ignored.
class Level {
/// An error occurred and an operation could not be completed. Usually shown
/// to the user on stderr.
@@ -85,7 +87,81 @@ class Level {
final String name;
String toString() => name;
- int get hashCode => name.hashCode;
+}
+
+typedef _LogFn(Entry entry);
+
+/// An enum type to control which log levels are displayed and how they are
+/// displayed.
+class Verbosity {
+ /// Silence all logging.
+ static const NONE = const Verbosity._("none", const {
+ Level.ERROR: null,
+ Level.WARNING: null,
+ Level.MESSAGE: null,
+ Level.IO: null,
+ Level.SOLVER: null,
+ Level.FINE: null
+ });
+
+ /// Shows only errors and warnings.
+ static const WARNING = const Verbosity._("warning", const {
+ Level.ERROR: _logToStderr,
+ Level.WARNING: _logToStderr,
+ Level.MESSAGE: null,
+ Level.IO: null,
+ Level.SOLVER: null,
+ Level.FINE: null
+ });
+
+ /// The default verbosity which shows errors, warnings, and messages.
+ static const NORMAL = const Verbosity._("normal", const {
+ Level.ERROR: _logToStderr,
+ Level.WARNING: _logToStderr,
+ Level.MESSAGE: _logToStdout,
+ Level.IO: null,
+ Level.SOLVER: null,
+ Level.FINE: null
+ });
+
+ /// Shows errors, warnings, messages, and IO event logs.
+ static const IO = const Verbosity._("io", const {
+ Level.ERROR: _logToStderrWithLabel,
+ Level.WARNING: _logToStderrWithLabel,
+ Level.MESSAGE: _logToStdoutWithLabel,
+ Level.IO: _logToStderrWithLabel,
+ Level.SOLVER: null,
+ Level.FINE: null
+ });
+
+ /// Shows errors, warnings, messages, and version solver logs.
+ static const SOLVER = const Verbosity._("solver", const {
+ Level.ERROR: _logToStderr,
+ Level.WARNING: _logToStderr,
+ Level.MESSAGE: _logToStdout,
+ Level.IO: null,
+ Level.SOLVER: _logToStdout,
+ Level.FINE: null
+ });
+
+ /// Shows all logs.
+ static const ALL = const Verbosity._("all", const {
+ Level.ERROR: _logToStderrWithLabel,
+ Level.WARNING: _logToStderrWithLabel,
+ Level.MESSAGE: _logToStdoutWithLabel,
+ Level.IO: _logToStderrWithLabel,
+ Level.SOLVER: _logToStderrWithLabel,
+ Level.FINE: _logToStderrWithLabel
+ });
+
+ const Verbosity._(this.name, this._loggers);
+ final String name;
+ final Map<Level, _LogFn> _loggers;
+
+ /// Returns whether or not logs at [level] will be printed.
+ bool isLevelVisible(Level level) => _loggers[level] != null;
+
+ String toString() => name;
}
/// A single log entry.
@@ -126,8 +202,6 @@ void fine(message) => write(Level.FINE, message);
/// Logs [message] at [level].
void write(Level level, message) {
- if (_loggers.isEmpty) showNormal();
-
var lines = splitLines(message.toString());
// Discard a trailing newline. This is useful since StringBuffers often end
@@ -138,7 +212,7 @@ void write(Level level, message) {
var entry = new Entry(level, lines);
- var logFn = _loggers[level];
+ var logFn = verbosity._loggers[level];
if (logFn != null) logFn(entry);
if (_transcript != null) _transcript.add(entry);
@@ -294,51 +368,6 @@ String red(text) => "$_red$text$_none";
/// do not prevent the user's goal from being reached.
String yellow(text) => "$_yellow$text$_none";
-/// Sets the verbosity to "normal", which shows errors, warnings, and messages.
-void showNormal() {
- _loggers[Level.ERROR] = _logToStderr;
- _loggers[Level.WARNING] = _logToStderr;
- _loggers[Level.MESSAGE] = _logToStdout;
- _loggers[Level.IO] = null;
- _loggers[Level.SOLVER] = null;
- _loggers[Level.FINE] = null;
-}
-
-/// Sets the verbosity to "io", which shows errors, warnings, messages, and IO
-/// event logs.
-void showIO() {
- _loggers[Level.ERROR] = _logToStderrWithLabel;
- _loggers[Level.WARNING] = _logToStderrWithLabel;
- _loggers[Level.MESSAGE] = _logToStdoutWithLabel;
- _loggers[Level.IO] = _logToStderrWithLabel;
- _loggers[Level.SOLVER] = null;
- _loggers[Level.FINE] = null;
-}
-
-/// Sets the verbosity to "solver", which shows errors, warnings, messages, and
-/// solver logs.
-void showSolver() {
- _loggers[Level.ERROR] = _logToStderr;
- _loggers[Level.WARNING] = _logToStderr;
- _loggers[Level.MESSAGE] = _logToStdout;
- _loggers[Level.IO] = null;
- _loggers[Level.SOLVER] = _logToStdout;
- _loggers[Level.FINE] = null;
-}
-
-/// Sets the verbosity to "all", which logs ALL the things.
-void showAll() {
- _loggers[Level.ERROR] = _logToStderrWithLabel;
- _loggers[Level.WARNING] = _logToStderrWithLabel;
- _loggers[Level.MESSAGE] = _logToStdoutWithLabel;
- _loggers[Level.IO] = _logToStderrWithLabel;
- _loggers[Level.SOLVER] = _logToStderrWithLabel;
- _loggers[Level.FINE] = _logToStderrWithLabel;
-}
-
-/// Returns whether or not logs at [level] will be printed.
-bool isLevelVisible(Level level) => _loggers[level] != null;
-
/// Log function that prints the message to stdout.
void _logToStdout(Entry entry) {
_logToStream(stdout, entry, showLabel: false);
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/command/serve.dart ('k') | sdk/lib/_internal/pub/lib/src/progress.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698