Skip to content

Commit 1afa214

Browse files
lpogowbarnha
andauthored
Add override_logging argument to Worker (#634) (#636)
* Add override_logging argument to Worker * Add worker_override_logging to App * Update documentation * Update tests Co-authored-by: Lukasz Pogoda <> Co-authored-by: William Barnhart <[email protected]>
1 parent e5007cc commit 1afa214

File tree

7 files changed

+49
-2
lines changed

7 files changed

+49
-2
lines changed

docs/includes/settingref.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2135,6 +2135,21 @@ Level used when redirecting standard outputs.
21352135
The logging level to use when redirect STDOUT/STDERR to logging.
21362136

21372137

2138+
.. setting:: worker_override_logging
2139+
2140+
``worker_override_logging``
2141+
---------------------------
2142+
2143+
:type: :class:`bool`
2144+
:default: :const:`True`
2145+
:environment: :envvar:`WORKER_OVERRIDE_LOGGING`
2146+
2147+
Override worker logging.
2148+
2149+
Enable to configure root logger.
2150+
2151+
Enabled by default.
2152+
21382153

21392154
.. _settings-extending:
21402155

faust/cli/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ class Command(abc.ABC): # noqa: B024
516516
daemon: bool = False
517517
redirect_stdouts: Optional[bool] = None
518518
redirect_stdouts_level: Optional[int] = None
519+
override_logging: Optional[bool] = None
519520

520521
builtin_options: OptionSequence = builtin_options
521522
options: Optional[OptionList] = None
@@ -660,6 +661,7 @@ def worker_for_service(
660661
console_port=self.console_port,
661662
redirect_stdouts=self.redirect_stdouts or False,
662663
redirect_stdouts_level=self.redirect_stdouts_level,
664+
override_logging=self.override_logging or False,
663665
loop=loop or asyncio.get_event_loop_policy().get_event_loop(),
664666
daemon=self.daemon,
665667
)

faust/types/settings/settings.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ def __init__(
168168
# Worker settings:
169169
worker_redirect_stdouts: Optional[bool] = None,
170170
worker_redirect_stdouts_level: Severity = None,
171+
worker_override_logging: Optional[bool] = None,
171172
# Extension settings:
172173
Agent: SymbolArg[Type[AgentT]] = None,
173174
ConsumerScheduler: SymbolArg[Type[SchedulingStrategyT]] = None,
@@ -2023,6 +2024,19 @@ def worker_redirect_stdouts_level(self) -> Severity:
20232024
The logging level to use when redirect STDOUT/STDERR to logging.
20242025
"""
20252026

2027+
@sections.Worker.setting(
2028+
params.Bool,
2029+
env_name="WORKER_OVERRIDE_LOGGING",
2030+
default=True,
2031+
)
2032+
def worker_override_logging(self) -> bool:
2033+
"""Override worker logging.
2034+
2035+
Enable to configure root logger.
2036+
2037+
Enabled by default.
2038+
"""
2039+
20262040
@sections.Extension.setting(
20272041
params.Symbol(Type[AgentT]),
20282042
default="faust:Agent",

faust/worker.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ def __init__(
229229
loop: Optional[asyncio.AbstractEventLoop] = None,
230230
redirect_stdouts: Optional[bool] = None,
231231
redirect_stdouts_level: Optional[Severity] = None,
232+
override_logging: Optional[bool] = None,
232233
logging_config: Optional[Dict] = None,
233234
**kwargs: Any,
234235
) -> None:
@@ -240,6 +241,8 @@ def __init__(
240241
redirect_stdouts = conf.worker_redirect_stdouts
241242
if redirect_stdouts_level is None:
242243
redirect_stdouts_level = conf.worker_redirect_stdouts_level or logging.INFO
244+
if override_logging is None:
245+
override_logging = conf.worker_override_logging
243246
if logging_config is None and app.conf.logging_config:
244247
logging_config = dict(app.conf.logging_config)
245248
super().__init__(
@@ -255,6 +258,7 @@ def __init__(
255258
console_port=console_port,
256259
redirect_stdouts=redirect_stdouts,
257260
redirect_stdouts_level=redirect_stdouts_level,
261+
override_logging=override_logging,
258262
logging_config=logging_config,
259263
loop=loop,
260264
**kwargs,

tests/functional/test_app.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,11 @@ def test_env_with_prefix(self):
444444
setting=Settings.worker_redirect_stdouts_level,
445445
expected_value="error",
446446
),
447+
EnvCase(
448+
env={"WORKER_OVERRIDE_LOGGING": "no"},
449+
setting=Settings.worker_override_logging,
450+
expected_value=False,
451+
),
447452
],
448453
)
449454
def test_env(self, env, setting, expected_value):
@@ -555,6 +560,7 @@ def test_defaults(self):
555560
assert conf.web_cors_options is None
556561
assert conf.worker_redirect_stdouts
557562
assert conf.worker_redirect_stdouts_level == "WARN"
563+
assert conf.worker_override_logging
558564

559565
assert conf.agent_supervisor is mode.OneForOneSupervisor
560566

@@ -677,6 +683,7 @@ def assert_config_equivalent(
677683
},
678684
worker_redirect_stdouts=False,
679685
worker_redirect_stdouts_level="DEBUG",
686+
worker_override_logging=False,
680687
broker_max_poll_records=1000,
681688
broker_max_poll_interval=10000,
682689
timezone=pytz.timezone("US/Eastern"), # noqa: B008
@@ -745,6 +752,7 @@ def assert_config_equivalent(
745752
web_cors_options=web_cors_options,
746753
worker_redirect_stdouts=worker_redirect_stdouts,
747754
worker_redirect_stdouts_level=worker_redirect_stdouts_level,
755+
worker_override_logging=worker_override_logging,
748756
logging_config=logging_config,
749757
consumer_auto_offset_reset=consumer_auto_offset_reset,
750758
ConsumerScheduler=ConsumerScheduler,
@@ -809,6 +817,7 @@ def assert_config_equivalent(
809817
assert conf.web_cors_options == web_cors_options
810818
assert conf.worker_redirect_stdouts == worker_redirect_stdouts
811819
assert conf.worker_redirect_stdouts_level == worker_redirect_stdouts_level
820+
assert conf.worker_override_logging == worker_override_logging
812821
assert conf.broker_max_poll_records == broker_max_poll_records
813822
assert conf.broker_max_poll_interval == broker_max_poll_interval
814823
assert conf.logging_config == logging_config

tests/unit/cli/test_base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ def test_worker_for_service(self, *, command):
366366
console_port=command.console_port,
367367
redirect_stdouts=command.redirect_stdouts or False,
368368
redirect_stdouts_level=command.redirect_stdouts_level,
369+
override_logging=command.override_logging or False,
369370
loop=loop,
370371
daemon=command.daemon,
371372
)

tests/unit/test_worker.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ def test_constructor(self, app):
3838
assert not w2.redirect_stdouts
3939
w3 = Worker(app, redirect_stdouts_level="DEBUG")
4040
assert w3.redirect_stdouts_level == 10
41-
w4 = Worker(app, logging_config={"foo": 1})
42-
assert w4.logging_config == {"foo": 1}
41+
w4 = Worker(app, override_logging=False)
42+
assert not w4.override_logging
43+
w5 = Worker(app, logging_config={"foo": 1})
44+
assert w5.logging_config == {"foo": 1}
4345

4446
def test_set_sensors(self, app):
4547
assert Worker(app, sensors=[1, 2]).sensors == {1, 2}

0 commit comments

Comments
 (0)