@@ -129,6 +129,63 @@ def test_memory_logger_factory_error() -> None:
129129 assert error_message in test_stream .getvalue ()
130130
131131
132+ def _unbuffered_factory (stream : StringIO ) -> MemoryLoggerFactory :
133+ return MemoryLoggerFactory (
134+ config = _MemoryLoggerFactoryConfig (
135+ logging_buffer_capacity = 0 ,
136+ logging_flush_level = logging .ERROR ,
137+ logging_log_level = logging .INFO ,
138+ log_stream = stream ,
139+ ),
140+ )
141+
142+
143+ def test_memory_logger_factory_configures_each_logger_once () -> None :
144+ test_stream = StringIO ()
145+ logger_factory = _unbuffered_factory (test_stream )
146+ try :
147+ first = logger_factory ("configured_once" )
148+ second = logger_factory ("configured_once" )
149+ second .info ("one line" )
150+
151+ assert first is second
152+ assert len (first .handlers ) == 1
153+ assert test_stream .getvalue ().splitlines () == ["one line" ]
154+ finally :
155+ logger_factory .close_handlers ()
156+
157+ assert logging .getLogger ("configured_once" ).handlers == []
158+
159+
160+ def test_memory_logger_factory_names_unnamed_logger_after_caller () -> None :
161+ logger_factory = _unbuffered_factory (StringIO ())
162+ try :
163+ assert logger_factory ().name == __name__
164+ finally :
165+ logger_factory .close_handlers ()
166+
167+
168+ def test_memory_logger_factory_keeps_a_level_set_beforehand () -> None :
169+ preset_logger = logging .getLogger ("preset_level" )
170+ preset_logger .setLevel (logging .DEBUG )
171+ logger_factory = _unbuffered_factory (StringIO ())
172+ try :
173+ assert logger_factory ("preset_level" ).level == logging .DEBUG
174+ assert logger_factory ("unset_level" ).level == logging .INFO
175+ finally :
176+ logger_factory .close_handlers ()
177+ preset_logger .setLevel (logging .NOTSET )
178+ logging .getLogger ("unset_level" ).setLevel (logging .NOTSET )
179+
180+
181+ def test_memory_logger_factory_close_handlers_restores_the_level_it_set () -> None :
182+ logger_factory = _unbuffered_factory (StringIO ())
183+ logger_factory ("restored_level" )
184+ logger_factory .close_handlers ()
185+
186+ assert logging .getLogger ("restored_level" ).level == logging .NOTSET
187+
188+
132189def test_logging_instrument_lifecycle_replay (logging_mock : LoggingMock ) -> None :
133190 instrument = LoggingInstrument (
134191 bootstrap_config = LoggingConfig (
0 commit comments