diff --git a/packages/flutter_tools/bin/sky_tools.dart b/packages/flutter_tools/bin/sky_tools.dart index 3ee3ebc8882..7df07e1f935 100644 --- a/packages/flutter_tools/bin/sky_tools.dart +++ b/packages/flutter_tools/bin/sky_tools.dart @@ -13,6 +13,7 @@ import 'package:sky_tools/src/build.dart'; import 'package:sky_tools/src/cache.dart'; import 'package:sky_tools/src/init.dart'; import 'package:sky_tools/src/install.dart'; +import 'package:sky_tools/src/logs.dart'; import 'package:sky_tools/src/run_mojo.dart'; import 'package:sky_tools/src/start.dart'; import 'package:sky_tools/src/stop.dart'; @@ -148,6 +149,7 @@ void main(List args) { ..addCommand(new CacheCommand()) ..addCommand(new InitCommand()) ..addCommand(new InstallCommand()) + ..addCommand(new LogsCommand()) ..addCommand(new RunMojoCommand()) ..addCommand(new StartCommand()) ..addCommand(new StopCommand()) diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 25579f93b1c..6d9cc0f2a7a 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -317,6 +317,26 @@ class AndroidDevice extends _Device { return true; } + void clearLogs() { + runSync([adbPath, 'logcat', '-c']); + } + + Future logs({bool clear: false}) { + if (clear) { + clearLogs(); + } + + return runCommandAndStreamOutput([ + adbPath, + 'logcat', + '-v', + 'tag', // Only log the tag and the message + '-s', + 'sky', + 'chromium', + ]); + } + @override bool isConnected() => _hasValidAndroid; } diff --git a/packages/flutter_tools/lib/src/logs.dart b/packages/flutter_tools/lib/src/logs.dart new file mode 100644 index 00000000000..841681f4ef6 --- /dev/null +++ b/packages/flutter_tools/lib/src/logs.dart @@ -0,0 +1,42 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +library sky_tools.logs; + +import 'dart:async'; + +import 'package:args/command_runner.dart'; +import 'package:logging/logging.dart'; +import 'package:sky_tools/src/device.dart'; + +final Logger _logging = new Logger('sky_tools.logs'); + +class LogsCommand extends Command { + final name = 'logs'; + final description = 'Show logs for running Sky apps.'; + AndroidDevice android = null; + + LogsCommand([this.android]) { + argParser.addFlag('clear', + negatable: false, + help: 'Clear log history before reading from logs (Android only).'); + if (android == null) { + android = new AndroidDevice(); + } + } + + @override + Future run() async { + Future androidLogProcess = null; + if (android.isConnected()) { + androidLogProcess = android.logs(clear: argResults['clear']); + } + + if (androidLogProcess != null) { + await androidLogProcess; + } + + return 0; + } +}