log library
Message logging.
Functions
void showAll() #
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;
}
void showSolver() #
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;
}
void showIO() #
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;
}
void showNormal() #
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;
}
void dumpTranscript() #
If recordTranscript() was called, then prints the previously recorded log
transcript to stderr.
void dumpTranscript() {
if (_transcript == null) return;
stderr.writeln('---- Log transcript ----');
for (var entry in _transcript) {
_logToStderrWithLabel(entry);
}
stderr.writeln('---- End log transcript ----');
}
void recordTranscript() #
Enables recording of log entries.
void recordTranscript() {
_transcript = <Entry>[];
}
void processResult(String executable, PubProcessResult result) #
Logs the results of running executable.
void processResult(String executable, PubProcessResult result) {
// Log it all as one message so that it shows up as a single unit in the logs.
var buffer = new StringBuffer();
buffer.write("Finished $executable. Exit code ${result.exitCode}.");
dumpOutput(String name, List<String> output) {
if (output.length == 0) {
buffer.write("Nothing output on $name.");
} else {
buffer.write("$name:");
var numLines = 0;
for (var line in output) {
if (++numLines > 1000) {
buffer.write('[${output.length - 1000}] more lines of output '
'truncated...]');
break;
}
buffer.write(line);
}
}
}
dumpOutput("stdout", result.stdout);
dumpOutput("stderr", result.stderr);
io(buffer.toString());
}
void process(String executable, List<String> arguments) #
Logs the spawning of an
executable process with
arguments at IO
level.
void process(String executable, List<String> arguments) {
io("Spawning $executable ${arguments.join(' ')}");
}
Future ioAsync(String startMessage, Future operation, [String endMessage(value)]) #
Logs an asynchronous IO operation. Logs startMessage before the operation starts, then when operation completes, invokes endMessage with the completion value and logs the result of that. Returns a future that completes after the logging is done.
If endMessage is omitted, then logs "Begin startMessage" before the operation and "End startMessage" after it.
Future ioAsync(String startMessage, Future operation,
[String endMessage(value)]) {
if (endMessage == null) {
io("Begin $startMessage.");
} else {
io(startMessage);
}
return operation.then((result) {
if (endMessage == null) {
io("End $startMessage.");
} else {
io(endMessage(result));
}
return result;
});
}
void write(Level level, message) #
Logs message at level.
void write(Level level, message) {
if (_loggers.isEmpty) showNormal();
var lines = splitLines(message.toString());
var entry = new Entry(level, lines);
var logFn = _loggers[level];
if (logFn != null) logFn(entry);
if (_transcript != null) _transcript.add(entry);
}
void fine(message) #
Logs message at Level.FINE.
void fine(message) => write(Level.FINE, message);
void solver(message) #
Logs message at Level.SOLVER.
void solver(message) => write(Level.SOLVER, message);
void message(message) #
Logs message at Level.MESSAGE.
void message(message) => write(Level.MESSAGE, message);
void warning(message) #
Logs message at Level.WARNING.
void warning(message) => write(Level.WARNING, message);
void error(message, [error]) #
Logs message at Level.ERROR.
void error(message, [error]) {
if (error != null) {
message = "$message: $error";
var trace = getAttachedStackTrace(error);
if (trace != null) {
message = "$message\nStackTrace: $trace";
}
}
write(Level.ERROR, message);
}