18
18
from fastapi .responses import JSONResponse
19
19
from dotenv import load_dotenv
20
20
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 )
31
-
32
- # Configure logging to file, if log file name is provided
33
- log_file_name = os .getenv ("APP_LOG_FILE" , "" )
34
- if log_file_name != "" :
35
- file_handler = logging .FileHandler (log_file_name )
36
- file_handler .setLevel (logging .INFO )
37
- file_formatter = logging .Formatter ("%(asctime)s [%(levelname)s] %(name)s: %(message)s" )
38
- file_handler .setFormatter (file_formatter )
39
- logger .addHandler (file_handler )
40
-
41
- enable_trace_string = os .getenv ("ENABLE_AZURE_MONITOR_TRACING" , "" )
21
+ from logging_config import configure_logging
22
+
42
23
enable_trace = False
43
- if enable_trace_string != "" :
44
- enable_trace = False
45
- else :
46
- enable_trace = str (enable_trace_string ).lower () == "true"
47
- if enable_trace :
48
- logger .info ("Tracing is enabled." )
49
- try :
50
- from azure .monitor .opentelemetry import configure_azure_monitor
51
- except ModuleNotFoundError :
52
- logger .error ("Required libraries for tracing not installed." )
53
- logger .error ("Please make sure azure-monitor-opentelemetry is installed." )
54
- exit ()
55
- else :
56
- logger .info ("Tracing is not enabled" )
24
+ logger = None
57
25
58
26
@contextlib .asynccontextmanager
59
27
async def lifespan (app : fastapi .FastAPI ):
60
28
agent = None
61
29
62
30
try :
63
- if not os .getenv ("RUNNING_IN_PRODUCTION" ):
64
- logger .info ("Loading .env file" )
65
- load_dotenv (override = True )
66
-
67
31
ai_client = AIProjectClient .from_connection_string (
68
32
credential = DefaultAzureCredential (exclude_shared_token_cache_credential = True ),
69
33
conn_str = os .environ ["AZURE_AIPROJECT_CONNECTION_STRING" ],
@@ -82,7 +46,10 @@ async def lifespan(app: fastapi.FastAPI):
82
46
logger .error ("Enable it via the 'Tracing' tab in your AI Foundry project page." )
83
47
exit ()
84
48
else :
49
+ from azure .monitor .opentelemetry import configure_azure_monitor
85
50
configure_azure_monitor (connection_string = application_insights_connection_string )
51
+ # Do not instrument the code yet, before trace fix is available.
52
+ #ai_client.telemetry.enable()
86
53
87
54
if os .environ .get ("AZURE_AI_AGENT_ID" ):
88
55
try :
@@ -125,6 +92,30 @@ async def lifespan(app: fastapi.FastAPI):
125
92
126
93
127
94
def create_app ():
95
+ if not os .getenv ("RUNNING_IN_PRODUCTION" ):
96
+ load_dotenv (override = True )
97
+
98
+ global logger
99
+ logger = configure_logging (os .getenv ("APP_LOG_FILE" , "" ))
100
+
101
+ enable_trace_string = os .getenv ("ENABLE_AZURE_MONITOR_TRACING" , "" )
102
+ global enable_trace
103
+ enable_trace = False
104
+ if enable_trace_string == "" :
105
+ enable_trace = False
106
+ else :
107
+ enable_trace = str (enable_trace_string ).lower () == "true"
108
+ if enable_trace :
109
+ logger .info ("Tracing is enabled." )
110
+ try :
111
+ from azure .monitor .opentelemetry import configure_azure_monitor
112
+ except ModuleNotFoundError :
113
+ logger .error ("Required libraries for tracing not installed." )
114
+ logger .error ("Please make sure azure-monitor-opentelemetry is installed." )
115
+ exit ()
116
+ else :
117
+ logger .info ("Tracing is not enabled" )
118
+
128
119
directory = os .path .join (os .path .dirname (__file__ ), "static" )
129
120
app = fastapi .FastAPI (lifespan = lifespan )
130
121
app .mount ("/static" , StaticFiles (directory = directory ), name = "static" )
0 commit comments