Skip to content

Commit

Permalink
Merge pull request #7 from mia-platform-marketplace/improve-log-system
Browse files Browse the repository at this point in the history
Improve log system
  • Loading branch information
theliuk authored Feb 5, 2024
2 parents 6d11161 + cbc9912 commit 6475c50
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 25 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,16 @@ These examples show how to use the MiaPlatformClient lib.
Usage example in a generic function:

```python
from src.utils.logger import logger
from src.utils.logger import get_logger

def dummy():
# Define headers for authentication
headers = {
'key': 'value'
}

logger = get_logger()

# Create a MiaPlatformClient instance with the defined headers and imported logger
mia_platform_client = MiaPlatformClient(headers, logger)
```
Expand Down
6 changes: 5 additions & 1 deletion TEMPLATE_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 30/01/2024

- Improved the log system removing third-party libraries logs

## 05/09/2023

### Changed

- Disabled the default logs and k8s routes logs
- Disabled the default and k8s routes logs

## 04/08/2023

Expand Down
11 changes: 7 additions & 4 deletions src/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
from src.apis.core.checkup import checkup_handler
from src.apis.hello_world import hello_world_handler

from src.utils.logger import get_logger


load_dotenv('default.env')

Expand All @@ -20,9 +22,11 @@
redoc_url=None
)

logger = get_logger()

# Middlewares
app.add_middleware(LoggerMiddleware)
app.add_middleware(MiaPlatformClientMiddleware)
app.add_middleware(LoggerMiddleware, logger=logger)
app.add_middleware(MiaPlatformClientMiddleware, logger=logger)

# Core
app.include_router(liveness_handler.router)
Expand All @@ -37,6 +41,5 @@
uvicorn.run(
app,
host='0.0.0.0',
port=int(os.environ.get('HTTP_PORT', 3000)),
log_config=None
port=int(os.environ.get('HTTP_PORT', 3000))
)
12 changes: 7 additions & 5 deletions src/middlewares/logger_middleware.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import time
from starlette.middleware.base import BaseHTTPMiddleware

from src.utils.logger import logger


class LoggerMiddleware(BaseHTTPMiddleware):
"""
Middleware to add the logger to the request and logs request info
"""

def __init__(self, app, logger):
super().__init__(app)
self.logger = logger

async def dispatch(self, request, call_next):
excluded_paths = [
'/-/ready',
Expand All @@ -17,15 +19,15 @@ async def dispatch(self, request, call_next):
]

if request.url.path not in excluded_paths:
logger.debug(f"{request.method} {request.url.path}")
self.logger.debug(f"{request.method} {request.url.path}")
start_time = time.time()

request.state.logger = logger
request.state.logger = self.logger
response = await call_next(request)

if request.url.path not in excluded_paths:
duration = time.time() - start_time
logger.debug(
self.logger.debug(
f"{request.method} {request.url.path} {response.status_code} {duration:.6f}s"
)

Expand Down
7 changes: 5 additions & 2 deletions src/middlewares/mia_platform_client_middleware.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from starlette.middleware.base import BaseHTTPMiddleware

from src.utils.logger import logger
from src.lib.mia_platform_client import MiaPlatformClient


Expand All @@ -9,10 +8,14 @@ class MiaPlatformClientMiddleware(BaseHTTPMiddleware):
Middleware to add the logger to the request
"""

def __init__(self, app, logger):
super().__init__(app)
self.logger = logger

async def dispatch(self, request, call_next):
request.state.mia_platform_client = MiaPlatformClient(
dict(request.headers.items()),
logger
self.logger
)

response = await call_next(request)
Expand Down
29 changes: 18 additions & 11 deletions src/utils/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@

load_dotenv('default.env')

# Stop uvicorn log propagation otherwise we would have duplicate logs
uvicorn_logger = logging.getLogger("uvicorn")
uvicorn_logger.propagate = False

# Set asyncio log level to warning for less verbose logging
asyncio_logger = logging.getLogger('asyncio')
asyncio_logger.setLevel(logging.WARNING)
def get_logger(logger_name='mialogger'):
logging.basicConfig(
stream=sys.stdout,
level=os.environ.get('LOG_LEVEL', logging.DEBUG),
)

logging.basicConfig(
stream=sys.stdout,
level=os.environ.get('LOG_LEVEL', logging.DEBUG),
)
# Clear any existing handlers
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)

logger = logging.getLogger('mialogger')
# Add a new handler with a filter
handler = logging.StreamHandler(sys.stdout)
handler.addFilter(lambda record: record.name.startswith(logger_name))

logging.root.addHandler(handler)

logger = logging.getLogger(logger_name)
logger.propagate = False

return logger
3 changes: 2 additions & 1 deletion tests/src/lib/mia_platform_client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import httpretty
from fastapi import status

from src.utils.logger import logger
from src.schemas.header_schema import HeaderSchema
from src.lib.mia_platform_client import MiaPlatformClient
from src.utils.logger import get_logger


@pytest.fixture(name='headers')
Expand All @@ -23,6 +23,7 @@ def fixture_baseurl():

@pytest.fixture(name='mia_platform_client')
def fixture_mia_platform_client(headers):
logger = get_logger()
mia_platform_client = MiaPlatformClient(headers, logger)
yield mia_platform_client

Expand Down

0 comments on commit 6475c50

Please sign in to comment.