@@ -37,8 +37,9 @@ class CloudLoggingFilter(logging.Filter):
3737 the `extras` argument when writing logs.
3838 """
3939
40- def __init__ (self , project = None ):
40+ def __init__ (self , project = None , default_labels = None ):
4141 self .project = project
42+ self .default_labels = default_labels if default_labels else {}
4243
4344 def filter (self , record ):
4445 # ensure record has all required fields set
@@ -61,6 +62,12 @@ def filter(self, record):
6162 inferred_http , inferred_trace = get_request_data ()
6263 if inferred_trace is not None and self .project is not None :
6364 inferred_trace = f"projects/{ self .project } /traces/{ inferred_trace } "
65+ # set labels
66+ user_labels = getattr (record , "labels" , {})
67+ record .total_labels = {** self .default_labels , ** user_labels }
68+ record .total_labels_str = ", " .join (
69+ [f'"{ k } ": "{ v } "' for k , v in record .total_labels .items ()]
70+ )
6471
6572 record .trace = getattr (record , "trace" , inferred_trace ) or ""
6673 record .http_request = getattr (record , "http_request" , inferred_http ) or {}
@@ -126,8 +133,7 @@ def __init__(
126133 option is :class:`.SyncTransport`.
127134 resource (~logging_v2.resource.Resource):
128135 Resource for this Handler. Defaults to ``global``.
129- labels (Optional[dict]): Monitored resource of the entry, defaults
130- to the global resource type.
136+ labels (Optional[dict]): Additional labels to attach to logs.
131137 stream (Optional[IO]): Stream to be used by the handler.
132138 """
133139 super (CloudLoggingHandler , self ).__init__ (stream )
@@ -138,7 +144,8 @@ def __init__(
138144 self .resource = resource
139145 self .labels = labels
140146 # add extra keys to log record
141- self .addFilter (CloudLoggingFilter (self .project_id ))
147+ log_filter = CloudLoggingFilter (project = self .project_id , default_labels = labels )
148+ self .addFilter (log_filter )
142149
143150 def emit (self , record ):
144151 """Actually log the specified logging record.
@@ -151,22 +158,16 @@ def emit(self, record):
151158 record (logging.LogRecord): The record to be logged.
152159 """
153160 message = super (CloudLoggingHandler , self ).format (record )
154- user_labels = getattr (record , "labels" , {})
155- # merge labels
156- total_labels = self .labels if self .labels is not None else {}
157- total_labels .update (user_labels )
158- if len (total_labels ) == 0 :
159- total_labels = None
160161 # send off request
161162 self .transport .send (
162163 record ,
163164 message ,
164165 resource = getattr (record , "resource" , self .resource ),
165- labels = total_labels ,
166- trace = getattr (record , "trace" , None ),
167- span_id = getattr (record , "span_id" , None ),
168- http_request = getattr (record , "http_request" , None ),
169- source_location = getattr (record , "source_location" , None ),
166+ labels = getattr ( record , " total_labels" , None ) or None ,
167+ trace = getattr (record , "trace" , None ) or None ,
168+ span_id = getattr (record , "span_id" , None ) or None ,
169+ http_request = getattr (record , "http_request" , None ) or None ,
170+ source_location = getattr (record , "source_location" , None ) or None ,
170171 )
171172
172173
0 commit comments