Add logs command and android implementation.

This commit is contained in:
Ian Fischer 2015-09-29 11:51:33 -07:00
parent 61bfe5ce84
commit 5e11889160
3 changed files with 64 additions and 0 deletions

View File

@ -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<String> args) {
..addCommand(new CacheCommand())
..addCommand(new InitCommand())
..addCommand(new InstallCommand())
..addCommand(new LogsCommand())
..addCommand(new RunMojoCommand())
..addCommand(new StartCommand())
..addCommand(new StopCommand())

View File

@ -317,6 +317,26 @@ class AndroidDevice extends _Device {
return true;
}
void clearLogs() {
runSync([adbPath, 'logcat', '-c']);
}
Future<int> 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;
}

View File

@ -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<int> run() async {
Future<int> androidLogProcess = null;
if (android.isConnected()) {
androidLogProcess = android.logs(clear: argResults['clear']);
}
if (androidLogProcess != null) {
await androidLogProcess;
}
return 0;
}
}