@@ -184,17 +184,17 @@ static bool sDefaultLogCallbackPreformatted;
184184
185185// LCOV_EXCL_START
186186void c4log_writeToCallback (C4LogLevel level, C4LogCallback callback, bool preformatted) noexcept {
187- if ( !callback ) level = kC4LogNone ;
187+ if ( !callback ) return ;
188+
188189 if ( sDefaultLogCallback ) {
189190 c4log_removeObserver (sDefaultLogCallback );
190191 c4logobserver_release (sDefaultLogCallback );
191192 sDefaultLogCallback = nullptr ;
192193 }
193- if ( level != kC4LogNone ) {
194- auto obs = make_retained<LogCallback>(callback, preformatted);
195- LogObserver::add (obs, LogLevel (level));
196- sDefaultLogCallback = toExternal (std::move (obs));
197- }
194+ auto obs = make_retained<LogCallback>(callback, preformatted);
195+ LogObserver::add (obs, LogLevel (level));
196+ sDefaultLogCallback = toExternal (std::move (obs));
197+
198198 sDefaultLogCallbackLevel = level;
199199 sDefaultLogCallbackPreformatted = preformatted;
200200}
@@ -204,8 +204,14 @@ C4LogCallback c4log_getCallback() noexcept { return sDefaultLogCallbackFn; }
204204C4LogLevel c4log_callbackLevel () noexcept { return sDefaultLogCallbackLevel ; } // LCOV_EXCL_LINE
205205
206206void c4log_setCallbackLevel (C4LogLevel level) noexcept {
207- if ( level != sDefaultLogCallbackLevel && sDefaultLogCallback )
208- c4log_writeToCallback (level, sDefaultLogCallbackFn , sDefaultLogCallbackPreformatted );
207+ if ( level != sDefaultLogCallbackLevel && sDefaultLogCallback ) {
208+ if ( level == kC4LogNone ) c4log_removeObserver (sDefaultLogCallback );
209+ else {
210+ auto logCallback = toInternal (sDefaultLogCallback );
211+ LogObserver::remove (logCallback);
212+ LogObserver::add (logCallback, LogLevel (level));
213+ }
214+ }
209215 sDefaultLogCallbackLevel = level;
210216}
211217
@@ -270,10 +276,9 @@ C4LogLevel c4log_binaryFileLevel() noexcept { return sDefaultLogFilesLevel; }
270276
271277void c4log_setBinaryFileLevel (C4LogLevel level) noexcept {
272278 if ( sDefaultLogFiles && level != sDefaultLogFilesLevel ) {
273- if ( level == kC4LogNone ) {
274- if ( sDefaultLogFiles ) { c4log_removeObserver (sDefaultLogFiles ); }
275- } else {
276- auto logFiles = dynamic_cast <LogFiles*>(toInternal (sDefaultLogFiles ));
279+ if ( level == kC4LogNone ) c4log_removeObserver (sDefaultLogFiles );
280+ else {
281+ auto logFiles = toInternal (sDefaultLogFiles );
277282 LogObserver::remove (logFiles);
278283 LogObserver::add (logFiles, LogLevel (level));
279284 }
0 commit comments