1+ # Copyright The OpenTelemetry Authors
2+ #
3+ # Licensed under the Apache License, Version 2.0 (the "License");
4+ # you may not use this file except in compliance with the License.
5+ # You may obtain a copy of the License at
6+ #
7+ # http://www.apache.org/licenses/LICENSE-2.0
8+ #
9+ # Unless required by applicable law or agreed to in writing, software
10+ # distributed under the License is distributed on an "AS IS" BASIS,
11+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+ # See the License for the specific language governing permissions and
13+ # limitations under the License.
14+
15+ import re
16+ import unittest
17+
18+ from opentelemetry .baggage import set_baggage
19+ from opentelemetry .context import attach , detach
20+ from opentelemetry .processor .baggage import (
21+ ALLOW_ALL_BAGGAGE_KEYS ,
22+ BaggageLogProcessor ,
23+ )
24+ from opentelemetry .sdk ._logs import LoggerProvider , LogRecordProcessor
25+ from opentelemetry .sdk ._logs .export import (
26+ InMemoryLogRecordExporter ,
27+ BatchLogRecordProcessor ,
28+ )
29+
30+
31+ class BaggageLogProcessorTest (unittest .TestCase ):
32+ def setUp (self ):
33+ self .exporter = InMemoryLogRecordExporter ()
34+ self .logger_provider = LoggerProvider ()
35+ self .logger_provider .add_log_record_processor (
36+ BaggageLogProcessor (ALLOW_ALL_BAGGAGE_KEYS )
37+ )
38+ self .logger_provider .add_log_record_processor (
39+ BatchLogRecordProcessor (self .exporter )
40+ )
41+ self .logger = self .logger_provider .get_logger ("test-logger" )
42+
43+ def _get_attributes (self ):
44+ self .logger_provider .force_flush ()
45+ logs = self .exporter .get_finished_logs ()
46+ self .assertTrue (len (logs ) > 0 )
47+ return logs [- 1 ].log_record .attributes
48+
49+ def test_check_the_baggage (self ):
50+ self .assertIsInstance (
51+ BaggageLogProcessor (ALLOW_ALL_BAGGAGE_KEYS ), LogRecordProcessor
52+ )
53+
54+ def test_baggage_added_to_log_record (self ):
55+ token = attach (set_baggage ("queen" , "bee" ))
56+ self .logger .emit (None )
57+ attributes = self ._get_attributes ()
58+ self .assertEqual (attributes .get ("queen" ), "bee" )
59+ detach (token )
60+
61+ def test_baggage_with_prefix (self ):
62+ token = attach (set_baggage ("queen" , "bee" ))
63+ logger_provider = LoggerProvider ()
64+ logger_provider .add_log_record_processor (
65+ BaggageLogProcessor (lambda key : key .startswith ("que" ))
66+ )
67+ exporter = InMemoryLogRecordExporter ()
68+ logger_provider .add_log_record_processor (
69+ BatchLogRecordProcessor (exporter )
70+ )
71+ logger = logger_provider .get_logger ("test-logger" )
72+ logger .emit (None )
73+ logger_provider .force_flush ()
74+ logs = exporter .get_finished_logs ()
75+ attributes = logs [- 1 ].log_record .attributes
76+ self .assertEqual (attributes .get ("queen" ), "bee" )
77+ detach (token )
78+
79+ def test_baggage_with_regex (self ):
80+ token = attach (set_baggage ("queen" , "bee" ))
81+ logger_provider = LoggerProvider ()
82+ logger_provider .add_log_record_processor (
83+ BaggageLogProcessor (
84+ lambda key : re .match (r"que.*" , key ) is not None
85+ )
86+ )
87+ exporter = InMemoryLogRecordExporter ()
88+ logger_provider .add_log_record_processor (
89+ BatchLogRecordProcessor (exporter )
90+ )
91+ logger = logger_provider .get_logger ("test-logger" )
92+ logger .emit (None )
93+ logger_provider .force_flush ()
94+ logs = exporter .get_finished_logs ()
95+ attributes = logs [- 1 ].log_record .attributes
96+ self .assertEqual (attributes .get ("queen" ), "bee" )
97+ detach (token )
98+
99+ def test_no_baggage_not_added (self ):
100+ self .logger .emit (None )
101+ self .logger_provider .force_flush ()
102+ logs = self .exporter .get_finished_logs ()
103+ self .assertTrue (len (logs ) > 0 )
104+ attributes = logs [- 1 ].log_record .attributes
105+ self .assertNotIn ("queen" , attributes )
106+
107+ @staticmethod
108+ def has_prefix (baggage_key : str ) -> bool :
109+ return baggage_key .startswith ("que" )
110+
111+ @staticmethod
112+ def matches_regex (baggage_key : str ) -> bool :
113+ return re .match (r"que.*" , baggage_key ) is not None
114+
115+
116+ if __name__ == "__main__" :
117+ unittest .main ()
0 commit comments