Skip to content

Commit 73f17b8

Browse files
committed
Avoid using group arg for verbosity and just use more fine-grained log levels
1 parent 8e84a78 commit 73f17b8

File tree

3 files changed

+27
-26
lines changed

3 files changed

+27
-26
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ The `LevelOverrideLogger` lets you *lower* (or *raise*) the level of the wrapped
390390
# Utilities
391391
392392
## Verbosity macros
393-
Sometimes when logging, it is desirable to be able to specify a verbosity level in addition to
393+
Sometimes when logging, it is desirable to be able to specify a verbosity level along with
394394
the log level, and to be able to filter on verbosity levels. For example, you may want multiple levels
395395
of verbosity for `Debug` log statements. LoggingExtras.jl exports verbosity macros that act like their
396396
non-verbose counterparts, but allow specifying a verbosity level as well:

src/verbosity.jl

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,46 @@ vlogmacrodocs = """
1515
1616
"Verbose" logging macros. Drop in replacements of standard logging macros, but an
1717
additional verbosity level `N` is passed to indicate differing verbosity levels
18-
for a given log level. The verbosity argument is passed as the `group` argument
19-
to the core logging logic, so care should be taken if other loggers are being used
20-
that also use the group argument.
21-
Note: by default group is passed as the source file, however it is poor practice to rely on this in the first place.
22-
Instead use the file argument for that.
18+
for a given log level. The verbosity argument is subtracted from the base log level when passed down
19+
to the core logging logic, so `@debugv 1 msg` will essentially call `@logmsg Debug-1 msg`.
2320
24-
An `LoggingExtras.EarlyFilteredLogger`can then be used to filter on the `group` argument.
21+
An `LoggingExtras.LevelOverrideLogger`can then be used to filter on the `level` argument.
2522
For convenience, the
2623
[`LoggintExtras.with(f; level, verbosity)`](@ref) function is provided to temporarily
27-
wrap the current logger with a level/verbosity filter while `f` is executed.
24+
wrap the current logger with a log level and verbosity subtracted to filter while `f` is executed.
2825
"""
2926

3027
macro debugv(verbosity::Int, msg, exs...)
3128
return restore_callsite_source_position!(
32-
esc(:($Base.@debug $msg _group=$verbosity $(exs...))),
29+
esc(:($Base.@logmsg (Logging.Debug - $verbosity) $msg $(exs...))),
3330
__source__,
3431
)
3532
end
3633

3734
macro infov(verbosity::Int, msg, exs...)
3835
return restore_callsite_source_position!(
39-
esc(:($Base.@info $msg _group=$verbosity $(exs...))),
36+
esc(:($Base.@logmsg (Logging.Info - $verbosity) $msg $(exs...))),
4037
__source__,
4138
)
4239
end
4340

4441
macro warnv(verbosity::Int, msg, exs...)
4542
return restore_callsite_source_position!(
46-
esc(:($Base.@warn $msg _group=$verbosity $(exs...))),
43+
esc(:($Base.@logmsg (Logging.Warn - $verbosity) $msg $(exs...))),
4744
__source__,
4845
)
4946
end
5047

5148
macro errorv(verbosity::Int, msg, exs...)
5249
return restore_callsite_source_position!(
53-
esc(:($Base.@error $msg _group=$verbosity $(exs...))),
50+
esc(:($Base.@logmsg (Logging.Error - $verbosity) $msg $(exs...))),
5451
__source__,
5552
)
5653
end
5754

5855
macro logmsgv(verbosity::Int, level, msg, exs...)
5956
return restore_callsite_source_position!(
60-
esc(:($Base.@logmsg $level $msg _group=$verbosity $(exs...))),
57+
esc(:($Base.@logmsg ($level - $verbosity) $msg $(exs...))),
6158
__source__,
6259
)
6360
end
@@ -69,19 +66,24 @@ end
6966
@eval @doc $vlogmacrodocs :(@errorv)
7067

7168
"""
72-
LoggingExtras.with(f; level=Info, verbosity=0)
69+
LoggingExtras.with(f; level=Info)
7370
7471
Convenience function like `Logging.with_logger` to temporarily wrap
75-
the current logger with a level/verbosity filter while `f` is executed.
72+
the current logger with a level filter while `f` is executed.
7673
That is, the current logger will still be used for actual logging, but
77-
log messages will first be checked that they meet the `level` and
78-
`verbosity` levels before being passed on to be logged.
74+
log messages will first be checked that they meet the `level`
75+
log level before being passed on to be logged.
7976
"""
80-
function with(f; level::Union{Int, LogLevel}=Info, verbosity::Int=0)
81-
with_logger(EarlyFilteredLogger(
82-
args -> !(args.group isa Int) || verbosity >= args.group,
83-
LevelOverrideLogger(level, current_logger()))
84-
) do
85-
f()
77+
function with(f; level::Union{Int, LogLevel}=Info, verbosity::Integer=0)
78+
lvl = Base.CoreLogging._min_enabled_level[]
79+
try
80+
# by default, this global filter is Debug, but for debug logging
81+
# we want to enable sub-Debug levels
82+
Base.CoreLogging._min_enabled_level[] = BelowMinLevel
83+
with_logger(LevelOverrideLogger(level - verbosity, current_logger())) do
84+
f()
85+
end
86+
finally
87+
Base.CoreLogging._min_enabled_level[] = lvl
8688
end
8789
end

test/runtests.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ end
239239
with_logger(logger) do
240240
@infov 1 "info 1 message"
241241
end
242-
@test logger.logs[1].group == 1
242+
@test isempty(logger.logs)
243243

244244
logger = TestLogger(min_level=Info)
245245
with_logger(logger) do
@@ -258,8 +258,7 @@ end
258258
end
259259
end
260260
@test length(logger.logs) == 2
261-
@test all(x -> x.level == Debug, logger.logs)
262-
@test map(x -> x.group, logger.logs) == [0, 1]
261+
@test map(x -> x.level, logger.logs) == [Debug, Debug-1]
263262
end
264263

265264
@testset "Deprecations" begin

0 commit comments

Comments
 (0)