@@ -667,3 +667,96 @@ def test_valid_instrumentation_info(self):
667
667
inst_source_dict ,
668
668
"instrumentation payload not logged properly" ,
669
669
)
670
+
671
+ def test_append_labels_adapter (self ):
672
+ import logging
673
+
674
+ import mock
675
+
676
+ from google .cloud .logging_v2 .handlers .structured_log import (
677
+ AppendLabelLoggingAdapter ,
678
+ )
679
+
680
+ logger = logging .getLogger ("google.cloud.logging_v2.handlers.structured_log" )
681
+ handler = self ._make_one ()
682
+ with mock .patch .object (handler , "emit_instrumentation_info" ):
683
+ with mock .patch .object (logger , "_log" ) as mock_log :
684
+ logger .addHandler (handler )
685
+ logger .setLevel (logging .INFO )
686
+ adapted_logger = AppendLabelLoggingAdapter (
687
+ logger , append_labels = {"service_id" : 1 , "another_value" : "foo" }
688
+ )
689
+ adapted_logger .info ("test message" )
690
+ mock_log .assert_called_once ()
691
+ self .assertEqual (
692
+ mock_log .call_args_list [0 ].kwargs ,
693
+ {"extra" : {"labels" : {"service_id" : 1 , "another_value" : "foo" }}},
694
+ )
695
+
696
+ def test_append_labels_adapter_override_defaults (self ):
697
+ import logging
698
+
699
+ import mock
700
+
701
+ from google .cloud .logging_v2 .handlers .structured_log import (
702
+ AppendLabelLoggingAdapter ,
703
+ )
704
+
705
+ logger = logging .getLogger ("google.cloud.logging_v2.handlers.structured_log" )
706
+ handler = self ._make_one ()
707
+ with mock .patch .object (handler , "emit_instrumentation_info" ):
708
+ with mock .patch .object (logger , "_log" ) as mock_log :
709
+ logger .addHandler (handler )
710
+ logger .setLevel (logging .INFO )
711
+ adapted_logger = AppendLabelLoggingAdapter (
712
+ logger , append_labels = {"service_id" : 1 , "another_value" : "foo" }
713
+ )
714
+ adapted_logger .info (
715
+ "test message" , extra = {"labels" : {"another_value" : "baz" }}
716
+ )
717
+ mock_log .assert_called_once ()
718
+ # the default value was overridden
719
+ self .assertEqual (
720
+ mock_log .call_args_list [0 ].kwargs ,
721
+ {"extra" : {"labels" : {"service_id" : 1 , "another_value" : "baz" }}},
722
+ )
723
+
724
+ def test_append_labels_adapter_stacked (self ):
725
+ import logging
726
+
727
+ import mock
728
+
729
+ from google .cloud .logging_v2 .handlers .structured_log import (
730
+ AppendLabelLoggingAdapter ,
731
+ )
732
+
733
+ logger = logging .getLogger ("google.cloud.logging_v2.handlers.structured_log" )
734
+ handler = self ._make_one ()
735
+ with mock .patch .object (handler , "emit_instrumentation_info" ):
736
+ with mock .patch .object (logger , "_log" ) as mock_log :
737
+ logger .addHandler (handler )
738
+ logger .setLevel (logging .INFO )
739
+ adapted_logger = AppendLabelLoggingAdapter (
740
+ logger , append_labels = {"service_id" : 1 , "another_value" : "foo" }
741
+ )
742
+ twice_adapted_logger = AppendLabelLoggingAdapter (
743
+ adapted_logger ,
744
+ # one fields is new, another was adapted already
745
+ append_labels = {"new_field" : "new_value" , "another_value" : "baz" },
746
+ )
747
+ twice_adapted_logger .info (
748
+ "test message" , extra = {"labels" : {"another_value" : "baz" }}
749
+ )
750
+ mock_log .assert_called_once ()
751
+ self .assertEqual (
752
+ mock_log .call_args_list [0 ].kwargs ,
753
+ {
754
+ "extra" : {
755
+ "labels" : {
756
+ "another_value" : "baz" , # value is changed by the second adapter
757
+ "new_field" : "new_value" , # introduced by the second adapter
758
+ "service_id" : 1 , # left as is from the first adapter configuration
759
+ }
760
+ }
761
+ },
762
+ )
0 commit comments