| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:logging/logging.dart'; |
| import 'package:meta/meta.dart'; |
| |
| import '_log_message.dart'; |
| import '_log_writer.dart'; |
| |
| /// A concrete implementation of [LogWriter] which prints the logs to stdout. |
| class StdoutLogWriter extends LogWriter { |
| /// Constructor |
| StdoutLogWriter({@required Stream<LogRecord> logStream}) |
| : assert(logStream != null), |
| super( |
| logStream: logStream, |
| shouldBufferLogs: false, |
| ); |
| |
| @override |
| void onMessage(LogMessage message) { |
| final scopes = [ |
| getLevelString(message.record.level), |
| ]; |
| |
| void addToScopes(String scope) { |
| if (scope != null && scope.isNotEmpty) { |
| scopes.add(scope); |
| } |
| } |
| |
| addToScopes(message.loggerBaseName); |
| addToScopes(message.record.loggerName); |
| addToScopes(message.codeLocation); |
| |
| message.tags.forEach(scopes.add); |
| String scopesString = scopes.join(':'); |
| |
| if (message.record.error != null) { |
| print( |
| '[$scopesString] ${message.record.message}: ${message.record.error}'); |
| } else { |
| print('[$scopesString] ${message.record.message}'); |
| } |
| |
| if (message.record.stackTrace != null) { |
| print('${message.record.stackTrace}'); |
| } |
| } |
| } |