Skip to content

Commit b8fe644

Browse files
authored
Merge pull request #123 from GabrielSalla/http-server-log-config
HTTP server log config
2 parents d0d8485 + f94c858 commit b8fe644

File tree

8 files changed

+109
-1
lines changed

8 files changed

+109
-1
lines changed

configs/configs-scalable.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ application_queue:
3333

3434
http_server:
3535
port: 8000
36+
log_level: error
3637

3738
time_zone: America/Sao_Paulo
3839

configs/configs.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ application_queue:
2828

2929
http_server:
3030
port: 8000
31+
log_level: error
3132

3233
time_zone: America/Sao_Paulo
3334

resources/kubernetes_template/config_map.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ data:
3939
4040
http_server:
4141
port: 8000
42+
log_level: error
4243
4344
time_zone: America/Sao_Paulo
4445

src/components/http_server/monitor_routes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
_logger = logging.getLogger("monitor_routes")
1818

19-
2019
monitor_routes = web.RouteTableDef()
2120
base_route = "/monitor"
2221

src/components/http_server/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from components.http_server.issue_routes import issue_routes
1515
from components.http_server.monitor_routes import monitor_routes
1616
from configs import configs
17+
from utils.log import set_logger_level
1718

1819
_logger = logging.getLogger("http_server")
1920

@@ -75,6 +76,9 @@ async def init(controller_enabled: bool = False) -> None:
7576
global _runner
7677

7778
app = web.Application()
79+
set_logger_level(logging.getLogger("aiohttp.web"), configs.http_server.log_level)
80+
set_logger_level(logging.getLogger("aiohttp.access"), configs.http_server.log_level)
81+
7882
app.add_routes(base_routes)
7983

8084
# Only the controller can receive action requests

src/configs/configs_loader.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ApplicationDatabaseConfig:
3333
@dataclass
3434
class HttpServerConfig:
3535
port: int
36+
log_level: Literal["default", "warning", "error", "none"] = "default"
3637

3738

3839
@dataclass

src/utils/log.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import logging
3+
from typing import Literal
34

45
from configs import configs
56

@@ -62,6 +63,18 @@ def format(self, record: logging.LogRecord) -> str:
6263
return json.dumps(message_dict, default=str)
6364

6465

66+
def set_logger_level(
67+
logger: logging.Logger, level: Literal["none", "error", "warning", "default"]
68+
) -> logging.Logger:
69+
if level == "none":
70+
logger.disabled = True
71+
elif level == "error":
72+
logger.setLevel(logging.ERROR)
73+
elif level == "warning":
74+
logger.setLevel(logging.WARNING)
75+
return logger
76+
77+
6578
def setup() -> None:
6679
"""Setup the logging"""
6780
stream = logging.StreamHandler()

tests/utils/test_log.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,94 @@ def set_json_formatter(monkeypatch, fields: dict[str, str] | None) -> None:
2424
log.setup()
2525

2626

27+
def test_set_logger_level_none(capsys, monkeypatch):
28+
"""'set_logger_level' should disable the logger if log level is 'none'"""
29+
set_json_formatter(monkeypatch, None)
30+
31+
logger = logging.getLogger("test_set_logger_level_none")
32+
log.set_logger_level(logger, "none")
33+
34+
logger.info("Info log message")
35+
logger.warning("Warning log message")
36+
logger.error("Error log message")
37+
logger.critical("Critical log message")
38+
39+
captured_message = capsys.readouterr().err.strip()
40+
41+
assert captured_message == ""
42+
43+
44+
def test_set_logger_level_error(capsys, monkeypatch):
45+
"""'set_logger_level' should show only error and critical messages if log level is 'error'"""
46+
set_json_formatter(monkeypatch, None)
47+
48+
logger = logging.getLogger("test_set_logger_level_error")
49+
log.set_logger_level(logger, "error")
50+
51+
logger.info("Info log message")
52+
logger.warning("Warning log message")
53+
logger.error("Error log message")
54+
logger.critical("Critical log message")
55+
56+
captured_message = capsys.readouterr().err.strip()
57+
58+
assert captured_message == "\n".join(
59+
[
60+
'{"message": "Error log message"}',
61+
'{"message": "Critical log message"}',
62+
]
63+
)
64+
65+
66+
def test_set_logger_level_warning(capsys, monkeypatch):
67+
"""'set_logger_level' should show only warning, error and critical messages if log level is
68+
'warning'"""
69+
set_json_formatter(monkeypatch, None)
70+
71+
logger = logging.getLogger("test_set_logger_level_warning")
72+
log.set_logger_level(logger, "warning")
73+
74+
logger.info("Info log message")
75+
logger.warning("Warning log message")
76+
logger.error("Error log message")
77+
logger.critical("Critical log message")
78+
79+
captured_message = capsys.readouterr().err.strip()
80+
81+
assert captured_message == "\n".join(
82+
[
83+
'{"message": "Warning log message"}',
84+
'{"message": "Error log message"}',
85+
'{"message": "Critical log message"}',
86+
]
87+
)
88+
89+
90+
def test_set_logger_level_default(capsys, monkeypatch):
91+
"""'set_logger_level' should show info, warning, error and critical messages if log level is
92+
'default'"""
93+
set_json_formatter(monkeypatch, None)
94+
95+
logger = logging.getLogger("test_set_logger_level_default")
96+
log.set_logger_level(logger, "default")
97+
98+
logger.info("Info log message")
99+
logger.warning("Warning log message")
100+
logger.error("Error log message")
101+
logger.critical("Critical log message")
102+
103+
captured_message = capsys.readouterr().err.strip()
104+
105+
assert captured_message == "\n".join(
106+
[
107+
'{"message": "Info log message"}',
108+
'{"message": "Warning log message"}',
109+
'{"message": "Error log message"}',
110+
'{"message": "Critical log message"}',
111+
]
112+
)
113+
114+
27115
@pytest.mark.parametrize(
28116
"log_format",
29117
[

0 commit comments

Comments
 (0)