Skip to content

Commit 1172d4f

Browse files
authored
Propagate Log Level Override (#67)
1 parent 3b7ee61 commit 1172d4f

File tree

4 files changed

+49
-3
lines changed

4 files changed

+49
-3
lines changed

src/CompositionalLoggers/overridelogger.jl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,39 @@ end
2222

2323
min_enabled_level(logger::LevelOverrideLogger) = logger.level
2424
catch_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

src/LoggingExtras.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ include("CompositionalLoggers/common.jl")
2929
include("CompositionalLoggers/activefiltered.jl")
3030
include("CompositionalLoggers/earlyfiltered.jl")
3131
include("CompositionalLoggers/minlevelfiltered.jl")
32-
include("CompositionalLoggers/overridelogger.jl")
3332
include("CompositionalLoggers/tee.jl")
3433
include("CompositionalLoggers/transformer.jl")
34+
include("CompositionalLoggers/overridelogger.jl")
3535

3636
include("Sinks/formatlogger.jl")
3737
include("Sinks/filelogger.jl")

src/verbosity.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,21 @@ log level before being passed on to be logged.
8484
For convenience, a `verbosity` keyword argument can be passed which also
8585
filters the "verbose logging" messages; see [`@debugv`](@ref), [`@infov`](@ref),
8686
[`@warnv`](@ref), [`@errorv`](@ref), and [`@logmsgv`](@ref).
87+
88+
!!! note
89+
90+
If you are not using any of the LoggingExtras compositional loggers then the level
91+
override just applies to the current logger. If on the other hand you are using
92+
compositional loggers then the override is applied throughout the current logging tree.
93+
This is generally what you want, but do be aware that in the case of the
94+
[`TeeLogger`](@ref) all branches of the T are overriden.
95+
For more control directly construct the logger you want by making use of
96+
[`LevelOverrideLogger`](@ref) and then use `with_logger` to make it active.
8797
"""
8898
function withlevel(f, level::Union{Int, LogLevel}=Info; verbosity::Integer=0)
8999
with_logger(EarlyFilteredLogger(
90100
args -> !(args.group isa Verbosity) || verbosity >= args.group.verbosity,
91-
LevelOverrideLogger(level, current_logger()))
101+
propagate_level_override(level, current_logger()))
92102
) do
93103
f()
94104
end

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ end
289289
end
290290
end
291291
end
292-
@test_broken length(logger.logs) == 1
292+
@test length(logger.logs) == 1
293293
end
294294

295295
@testset "Deprecations" begin

0 commit comments

Comments
 (0)