29
29
stream_handler .setFormatter (stream_formatter )
30
30
logger .addHandler (stream_handler )
31
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" , "" )
42
32
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" )
57
33
58
34
@contextlib .asynccontextmanager
59
35
async def lifespan (app : fastapi .FastAPI ):
60
36
agent = None
61
37
62
38
try :
63
- if not os .getenv ("RUNNING_IN_PRODUCTION" ):
64
- logger .info ("Loading .env file" )
65
- load_dotenv (override = True )
66
-
67
39
ai_client = AIProjectClient .from_connection_string (
68
40
credential = DefaultAzureCredential (exclude_shared_token_cache_credential = True ),
69
41
conn_str = os .environ ["AZURE_AIPROJECT_CONNECTION_STRING" ],
@@ -82,7 +54,10 @@ async def lifespan(app: fastapi.FastAPI):
82
54
logger .error ("Enable it via the 'Tracing' tab in your AI Foundry project page." )
83
55
exit ()
84
56
else :
57
+ from azure .monitor .opentelemetry import configure_azure_monitor
85
58
configure_azure_monitor (connection_string = application_insights_connection_string )
59
+ # Do not instrument the code yet, before trace fix is available.
60
+ #ai_client.telemetry.enable()
86
61
87
62
if os .environ .get ("AZURE_AI_AGENT_ID" ) is not None :
88
63
try :
@@ -125,6 +100,36 @@ async def lifespan(app: fastapi.FastAPI):
125
100
126
101
127
102
def create_app ():
103
+ if not os .getenv ("RUNNING_IN_PRODUCTION" ):
104
+ load_dotenv (override = True )
105
+
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 )
114
+
115
+ enable_trace_string = os .getenv ("ENABLE_AZURE_MONITOR_TRACING" , "" )
116
+ global enable_trace
117
+ enable_trace = False
118
+ if enable_trace_string == "" :
119
+ enable_trace = False
120
+ else :
121
+ enable_trace = str (enable_trace_string ).lower () == "true"
122
+ if enable_trace :
123
+ logger .info ("Tracing is enabled." )
124
+ try :
125
+ from azure .monitor .opentelemetry import configure_azure_monitor
126
+ except ModuleNotFoundError :
127
+ logger .error ("Required libraries for tracing not installed." )
128
+ logger .error ("Please make sure azure-monitor-opentelemetry is installed." )
129
+ exit ()
130
+ else :
131
+ logger .info ("Tracing is not enabled" )
132
+
128
133
directory = os .path .join (os .path .dirname (__file__ ), "static" )
129
134
app = fastapi .FastAPI (lifespan = lifespan )
130
135
app .mount ("/static" , StaticFiles (directory = directory ), name = "static" )
0 commit comments