66import google .cloud .logging
77from google .cloud .logging_v2 import Client
88
9+ from shared .common .logging_common import get_env_logging_level
910from middleware .request_context import get_request_context
1011from utils .config import get_config , PROJECT_ID
1112
1213
13- def get_env_logging_level ():
14- """
15- Get the logging level from the environment via OS variable LOGGING_LEVEL. Returns INFO if not set.
16- """
17- return os .getenv ("LOGGING_LEVEL" , "INFO" )
18-
19-
2014def is_local_env ():
2115 return os .getenv ("K_SERVICE" ) is None
2216
@@ -64,28 +58,31 @@ def init_logger():
6458 if hasattr (Logger , "initialized" ):
6559 return
6660 logging .basicConfig (level = get_env_logging_level ())
67- if is_local_env ():
61+ if not is_local_env ():
6862 # Use the default logging handler
6963 logging .info ("Using default logging handler" )
70- return
71- try :
72- client = google .cloud .logging_v2 .Client ()
73- client .get_default_handler ()
74- client .setup_logging ()
75- logging .info ("GCP logging client initialized" )
76- except Exception as error :
77- # This might happen when the GCP authorization credentials are not available.
78- # Example, when running the tests locally
79- logging .error (f"Error initializing the logger: { error } " )
80- Logger .initialized = True
64+ else :
65+ try :
66+ client = google .cloud .logging_v2 .Client ()
67+ client .get_default_handler ()
68+ client .setup_logging ()
69+ logger = _get_trace_logger (logging .getLogger ("LOGGING_UTILS" ))
70+ logger .info ("GCP logging client initialized" )
71+ except Exception as error :
72+ # This might happen when the GCP authorization credentials are not available.
73+ # Example, when running the tests locally
74+ logging .error (f"Error initializing the logger: { error } " )
75+ Logger .initialized = True
8176
8277 def get_logger (self ):
8378 return self .logger
8479
8580
86- class TraceLogger :
81+ class TraceLogger ( logging . Logger ) :
8782 def __init__ (self , logger : logging .Logger , project_id : str , trace_id : str , span_id : str ):
83+ super ().__init__ (logger .name )
8884 self ._logger = logger
85+ self ._logger .propagate = False
8986 self ._trace_id = None
9087 self ._span_id = None
9188 self ._project_id = project_id
@@ -106,7 +103,7 @@ def _inject_trace(self, extra):
106103 return trace_fields
107104
108105 def info (self , msg , * args , extra = None , ** kwargs ):
109- return self ._logger .info (msg , * args , extra = self ._inject_trace (extra ), ** kwargs )
106+ return self ._logger .info (msg , extra = self ._inject_trace (extra ))
110107
111108 def error (self , msg , * args , extra = None , ** kwargs ):
112109 return self ._logger .error (msg , * args , extra = self ._inject_trace (extra ), ** kwargs )
@@ -121,16 +118,21 @@ def exception(self, msg, *args, extra=None, **kwargs):
121118 return self ._logger .exception (msg , * args , extra = self ._inject_trace (extra ), ** kwargs )
122119
123120
124- def new_logger (name : str ):
121+ def new_logger (name : str ) -> logging . Logger :
125122 """
126123 Create a new logger with the given name.
127124 """
128125 Logger .init_logger ()
129126 logger = logging .getLogger (name )
130127 logger .setLevel (get_env_logging_level ())
131- request_context = get_request_context ( )
128+ return _get_trace_logger ( logger )
132129 # if not request_context:
133130 # return logger
131+ def _get_trace_logger (logger : logging .Logger ) -> TraceLogger :
132+ """
133+ Create a new TraceLogger with the given logger and name.
134+ """
135+ request_context = get_request_context ()
134136 return TraceLogger (logger , get_config (PROJECT_ID ), request_context .get ("trace_id" ), request_context .get ("span_id" ))
135137
136138
0 commit comments