diff --git a/packages/shorebird_cli/lib/src/command_runner.dart b/packages/shorebird_cli/lib/src/command_runner.dart index e8904520..2825734d 100644 --- a/packages/shorebird_cli/lib/src/command_runner.dart +++ b/packages/shorebird_cli/lib/src/command_runner.dart @@ -135,7 +135,7 @@ class ShorebirdCliCommandRunner extends CompletionCommandRunner { // exit with an error code logger ..err(e.message) - ..err('$stackTrace') + ..detail('$stackTrace') ..info('') ..info(usage); return ExitCode.usage.code; @@ -210,7 +210,7 @@ Run ${lightCyan.wrap('shorebird upgrade')} to upgrade.'''); } catch (error, stackTrace) { logger ..err('$error') - ..info('$stackTrace'); + ..detail('$stackTrace'); exitCode = ExitCode.software.code; } } diff --git a/packages/shorebird_cli/test/src/command_runner_test.dart b/packages/shorebird_cli/test/src/command_runner_test.dart index ab7db98d..a16013b8 100644 --- a/packages/shorebird_cli/test/src/command_runner_test.dart +++ b/packages/shorebird_cli/test/src/command_runner_test.dart @@ -272,6 +272,18 @@ Run ${lightCyan.wrap('shorebird upgrade')} to upgrade.'''), }); group('on command failure', () { + test('logs a stack trace using detail', () async { + // This will fail due to the release android command missing scoped + // dependencies. + // Note: the --verbose flag is here for illustrative purposes only. + // Because logger is a mock, setting the log level in code does + // nothing. + await runWithOverrides( + () => commandRunner.run(['release', 'android', '--verbose']), + ); + verify(() => logger.detail(any(that: contains('#0')))).called(1); + }); + group('when running with --verbose', () { setUp(() { when(() => logger.level).thenReturn(Level.verbose);