2222
2323min_enabled_level (logger:: LevelOverrideLogger ) = logger. level
2424catch_exceptions (logger:: LevelOverrideLogger ) = catch_exceptions (logger. logger)
25+
26+ # ################################################################################
27+ # Propagating the constructor down to places it is needed
28+
29+ # fallback case, not a logger we know about, assume it is a sink
30+ propagate_level_override (level, sink) = LevelOverrideLogger (level, sink)
31+
32+
33+ for L in (ActiveFilteredLogger, EarlyFilteredLogger, TransformerLogger)
34+ @eval function propagate_level_override (level, logger:: $L )
35+ # these loggers don't level filter on their own, just based on what they wrap
36+ # so just need to propagate on to what they wrapped
37+ return $ L (getfield (logger, 1 ), propagate_level_override (level, logger. logger))
38+ end
39+ end
40+
41+ function propagate_level_override (level, logger:: MinLevelLogger )
42+ # override overpowers any MinLevelLogger so can drop that, and just propagate on to sink
43+ # TODO : CHECK ME is this right for both MinLevelLoggers that are higher and also that are lower?
44+ return propagate_level_override (level, logger. logger)
45+ end
46+
47+ function propagate_level_override (level, logger:: LevelOverrideLogger )
48+ # overriding the override: just use the new one, and propagate
49+ return LevelOverrideLogger (level, propagate_level_override (level, logger. logger))
50+ end
51+
52+ function propagate_level_override (level, logger:: TeeLogger )
53+ # We are going to propage through each of them, this is not unarguably the universal
54+ # the right choice, but it is consistent. For more control should construct directly
55+ new_backings = map (logger. loggers) do backing
56+ propagate_level_override (level, backing)
57+ end
58+ # The TeeLogger itself had no level control so doesn't need a wrapper
59+ return TeeLogger (new_backings)
60+ end
0 commit comments