logs.dart 1.32 KB
Newer Older
1 2 3 4 5 6
// 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.

import 'dart:async';

7
import '../device.dart';
8
import '../globals.dart';
9
import '../runner/flutter_command.dart';
10

11 12
class LogsCommand extends FlutterCommand {
  LogsCommand() {
13
    argParser.addFlag('clear',
Devon Carew's avatar
Devon Carew committed
14 15 16 17
      negatable: false,
      abbr: 'c',
      help: 'Clear log history before reading from logs.'
    );
18 19
  }

20 21 22 23 24 25
  @override
  final String name = 'logs';

  @override
  final String description = 'Show log output for running Flutter apps.';

26
  @override
27 28
  bool get requiresProjectRoot => false;

29
  @override
30 31
  bool get requiresDevice => true;

32
  @override
33
  Future<int> runInProject() async {
34
    Device device = deviceForCommand;
Devon Carew's avatar
Devon Carew committed
35

36 37
    if (argResults['clear'])
      device.clearLogs();
38

39
    DeviceLogReader logReader = device.logReader;
40

41
    printStatus('Showing $logReader logs:');
42

43 44 45
    // Start reading.
    if (!logReader.isReading)
      await logReader.start();
Devon Carew's avatar
Devon Carew committed
46

Ian Hickson's avatar
Ian Hickson committed
47
    StreamSubscription<String> subscription = logReader.lines.listen(printStatus);
48

49 50
    // Wait for the log reader to be finished.
    int result = await logReader.finished;
51

52 53 54 55 56
    subscription.cancel();

    if (result != 0)
      printError('Error listening to $logReader logs.');
    return result;
57 58
  }
}