Added option to disable log prefix via cli

Signed-off-by: Kaushal Rohit <rohit.kg98@gmail.com>
This commit is contained in:
Kaushal Rohit 2020-05-08 23:30:19 +05:30
parent a24843e1e4
commit cddaa77fea
3 changed files with 34 additions and 15 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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