Skip to content

Commit 607b59d

Browse files
author
Marko Hietala
committed
logging update
1 parent 17974f8 commit 607b59d

File tree

3 files changed

+44
-37
lines changed

3 files changed

+44
-37
lines changed

src/api/main.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,10 @@
1818
from fastapi.responses import JSONResponse
1919
from dotenv import load_dotenv
2020

21-
# Create a central logger for the application
22-
logger = logging.getLogger("azureaiapp")
23-
logger.setLevel(logging.INFO)
24-
25-
# Configure the stream handler (stdout)
26-
stream_handler = logging.StreamHandler(sys.stdout)
27-
stream_handler.setLevel(logging.INFO)
28-
stream_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
29-
stream_handler.setFormatter(stream_formatter)
30-
logger.addHandler(stream_handler)
21+
from logging_config import configure_logging
3122

3223
enable_trace = False
24+
logger = None
3325

3426
@contextlib.asynccontextmanager
3527
async def lifespan(app: fastapi.FastAPI):
@@ -103,14 +95,8 @@ def create_app():
10395
if not os.getenv("RUNNING_IN_PRODUCTION"):
10496
load_dotenv(override=True)
10597

106-
# Configure logging to file, if log file name is provided
107-
log_file_name = os.getenv("APP_LOG_FILE", "")
108-
if log_file_name != "":
109-
file_handler = logging.FileHandler(log_file_name)
110-
file_handler.setLevel(logging.INFO)
111-
file_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
112-
file_handler.setFormatter(file_formatter)
113-
logger.addHandler(file_handler)
98+
global logger
99+
logger = configure_logging(os.getenv("APP_LOG_FILE", ""))
114100

115101
enable_trace_string = os.getenv("ENABLE_AZURE_MONITOR_TRACING", "")
116102
global enable_trace

src/gunicorn.conf.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,11 @@
1111

1212
from dotenv import load_dotenv
1313

14+
from logging_config import configure_logging
15+
1416
load_dotenv()
1517

16-
# Create a central logger for the application
17-
logger = logging.getLogger("azureaiapp")
18-
logger.setLevel(logging.INFO)
19-
20-
# Configure the stream handler (stdout)
21-
stream_handler = logging.StreamHandler(sys.stdout)
22-
stream_handler.setLevel(logging.INFO)
23-
stream_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
24-
stream_handler.setFormatter(stream_formatter)
25-
logger.addHandler(stream_handler)
26-
27-
# Configure logging to file, if log file name is provided
28-
log_file_name = os.getenv("APP_LOG_FILE", "")
29-
if log_file_name != "":
30-
file_handler = logging.FileHandler(log_file_name)
31-
file_handler.setLevel(logging.INFO)
32-
file_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
33-
file_handler.setFormatter(file_formatter)
34-
logger.addHandler(file_handler)
18+
logger = configure_logging(os.getenv("APP_LOG_FILE", ""))
3519

3620
FILES_NAMES = ["product_info_1.md", "product_info_2.md"]
3721

src/logging_config.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) Microsoft. All rights reserved.
2+
# Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
3+
4+
import logging
5+
import sys
6+
from typing import Optional
7+
8+
def configure_logging(log_file_name: Optional[str] = None, logger_name: str = "azureaiapp") -> logging.Logger:
9+
"""
10+
Configure and return a logger with both stream (stdout) and optional file handlers.
11+
12+
:param log_file_name: The path to the log file. If provided, logs will also be written to this file.
13+
:type log_file_name: Optional[str]
14+
:param logger_name: The name of the logger to configure.
15+
:type logger_name: str
16+
:return: The configured logger instance.
17+
:rtype: logging.Logger
18+
"""
19+
logger = logging.getLogger(logger_name)
20+
logger.setLevel(logging.INFO)
21+
22+
# Stream handler (stdout)
23+
stream_handler = logging.StreamHandler(sys.stdout)
24+
stream_handler.setLevel(logging.INFO)
25+
stream_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
26+
stream_handler.setFormatter(stream_formatter)
27+
logger.addHandler(stream_handler)
28+
29+
# File handler if a log file is specified
30+
if log_file_name:
31+
file_handler = logging.FileHandler(log_file_name)
32+
file_handler.setLevel(logging.INFO)
33+
file_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
34+
file_handler.setFormatter(file_formatter)
35+
logger.addHandler(file_handler)
36+
37+
return logger

0 commit comments

Comments
 (0)