diff --git a/compose/cli/log_printer.py b/compose/cli/log_printer.py index cd9f73c2c..c49b817de 100644 --- a/compose/cli/log_printer.py +++ b/compose/cli/log_printer.py @@ -16,18 +16,22 @@ from compose.utils import split_buffer class LogPresenter: - def __init__(self, prefix_width, color_func): + def __init__(self, prefix_width, color_func, keep_prefix=True): self.prefix_width = prefix_width self.color_func = color_func + self.keep_prefix = keep_prefix def present(self, container, line): - prefix = container.name_without_project.ljust(self.prefix_width) - return '{prefix} {line}'.format( - prefix=self.color_func(prefix + ' |'), - line=line) + to_log = '{line}'.format(line=line) + + if self.keep_prefix: + prefix = container.name_without_project.ljust(self.prefix_width) + to_log = '{prefix} '.format(prefix=self.color_func(prefix + ' |')) + to_log + + return to_log -def build_log_presenters(service_names, monochrome): +def build_log_presenters(service_names, monochrome, keep_prefix=True): """Return an iterable of functions. Each function can be used to format the logs output of a container. @@ -38,7 +42,7 @@ def build_log_presenters(service_names, monochrome): return text for color_func in cycle([no_color] if monochrome else colors.rainbow()): - yield LogPresenter(prefix_width, color_func) + yield LogPresenter(prefix_width, color_func, keep_prefix) def max_name_width(service_names, max_index_width=3): diff --git a/compose/cli/main.py b/compose/cli/main.py index 626ef294a..6776dae9e 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -610,11 +610,12 @@ class TopLevelCommand: Usage: logs [options] [--] [SERVICE...] Options: - --no-color Produce monochrome output. - -f, --follow Follow log output. - -t, --timestamps Show timestamps. - --tail="all" Number of lines to show from the end of the logs - for each container. + --no-color Produce monochrome output. + -f, --follow Follow log output. + -t, --timestamps Show timestamps. + --tail="all" Number of lines to show from the end of the logs + for each container. + --no-log-prefix Don't print prefix in logs. """ containers = self.project.containers(service_names=options['SERVICE'], stopped=True) @@ -635,7 +636,8 @@ class TopLevelCommand: containers, set_no_color_if_clicolor(options['--no-color']), log_args, - event_stream=self.project.events(service_names=options['SERVICE'])).run() + event_stream=self.project.events(service_names=options['SERVICE']), + keep_prefix=not options['--no-log-prefix']).run() def pause(self, options): """ @@ -1017,6 +1019,7 @@ class TopLevelCommand: container. Implies --abort-on-container-exit. --scale SERVICE=NUM Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. + --no-log-prefix Don't print prefix in logs. """ start_deps = not options['--no-deps'] always_recreate_deps = options['--always-recreate-deps'] @@ -1028,6 +1031,7 @@ class TopLevelCommand: detached = options.get('--detach') no_start = options.get('--no-start') attach_dependencies = options.get('--attach-dependencies') + keep_prefix = not options['--no-log-prefix'] if detached and (cascade_stop or exit_value_from or attach_dependencies): raise UserError( @@ -1094,7 +1098,8 @@ class TopLevelCommand: set_no_color_if_clicolor(options['--no-color']), {'follow': True}, cascade_stop, - event_stream=self.project.events(service_names=service_names)) + event_stream=self.project.events(service_names=service_names), + keep_prefix=keep_prefix) print("Attaching to", list_containers(log_printer.containers)) cascade_starter = log_printer.run() @@ -1382,10 +1387,11 @@ def log_printer_from_project( log_args, cascade_stop=False, event_stream=None, + keep_prefix=True, ): return LogPrinter( containers, - build_log_presenters(project.service_names, monochrome), + build_log_presenters(project.service_names, monochrome, keep_prefix), event_stream or project.events(), cascade_stop=cascade_stop, log_args=log_args) diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py index d678130c1..a7ccd1489 100644 --- a/tests/acceptance/cli_test.py +++ b/tests/acceptance/cli_test.py @@ -3034,3 +3034,12 @@ services: another = self.project.get_service('--log-service') assert len(service.containers()) == 1 assert len(another.containers()) == 1 + + def test_up_no_log_prefix(self): + self.base_dir = 'tests/fixtures/echo-services' + result = self.dispatch(['up', '--no-log-prefix']) + + assert 'simple' in result.stdout + assert 'another' in result.stdout + assert 'exited with code 0' in result.stdout + assert 'exited with code 0' in result.stdout