1
- function restore_callsite_source_position! (expr, src)
1
+ function restore_callsite_source_position! (m, expr, src)
2
2
@assert expr. head == :escape
3
3
@assert expr. args[1 ]. head == :macrocall
4
4
@assert expr. args[1 ]. args[2 ] isa LineNumberNode
@@ -7,7 +7,15 @@ function restore_callsite_source_position!(expr, src)
7
7
# Logging.jl macros; otherwise, they would always report this (verbosity.jl)
8
8
# file as the logging callsite
9
9
expr. args[1 ]. args[2 ] = src
10
- return expr
10
+ ex = quote
11
+ LoggingExtras. deprecate_verbosity ($ (Meta. quot (m)))
12
+ $ expr
13
+ end
14
+ return ex
15
+ end
16
+
17
+ function deprecate_verbosity (m)
18
+ Base. depwarn (" Verbosity logging macros are deprecated as they are not compatible with juliac-compiled programs" , m)
11
19
end
12
20
13
21
vlogmacrodocs = """
34
42
35
43
" $vlogmacrodocs "
36
44
macro debugv (verbosity:: Int , msg, exs... )
37
- return restore_callsite_source_position! (
45
+ return restore_callsite_source_position! (:debugv ,
38
46
esc (:($ Base. @debug $ msg _group= $ (Verbosity (verbosity)) $ (exs... ))),
39
47
__source__,
40
48
)
41
49
end
42
50
43
51
" $vlogmacrodocs "
44
52
macro infov (verbosity:: Int , msg, exs... )
45
- return restore_callsite_source_position! (
53
+ return restore_callsite_source_position! (:infov ,
46
54
esc (:($ Base. @info $ msg _group= $ (Verbosity (verbosity)) $ (exs... ))),
47
55
__source__,
48
56
)
49
57
end
50
58
51
59
" $vlogmacrodocs "
52
60
macro warnv (verbosity:: Int , msg, exs... )
53
- return restore_callsite_source_position! (
61
+ return restore_callsite_source_position! (:warnv ,
54
62
esc (:($ Base. @warn $ msg _group= $ (Verbosity (verbosity)) $ (exs... ))),
55
63
__source__,
56
64
)
57
65
end
58
66
59
67
" $vlogmacrodocs "
60
68
macro errorv (verbosity:: Int , msg, exs... )
61
- return restore_callsite_source_position! (
69
+ return restore_callsite_source_position! (:errorv ,
62
70
esc (:($ Base. @error $ msg _group= $ (Verbosity (verbosity)) $ (exs... ))),
63
71
__source__,
64
72
)
65
73
end
66
74
67
75
" $vlogmacrodocs "
68
76
macro logmsgv (verbosity:: Int , level, msg, exs... )
69
- return restore_callsite_source_position! (
77
+ return restore_callsite_source_position! (:logmsgv ,
70
78
esc (:($ Base. @logmsg $ level $ msg _group= $ (Verbosity (verbosity)) $ (exs... ))),
71
79
__source__,
72
80
)
73
81
end
74
82
75
83
"""
76
- LoggingExtras.withlevel(f, level; verbosity::Integer=0)
84
+ LoggingExtras.withlevel(f, level; verbosity::Integer=0, group::Union{Symbol, Nothing}=nothing )
77
85
78
86
Convenience function like `Logging.with_logger` to temporarily wrap
79
87
the current logger with a level filter while `f` is executed.
80
88
That is, the current logger will still be used for actual logging, but
81
89
log messages will first be checked that they meet the `level`
82
90
log level before being passed on to be logged.
83
91
84
- For convenience, a `verbosity` keyword argument can be passed which also
85
- filters the "verbose logging" messages; see [`@debugv`](@ref), [`@infov`](@ref),
86
- [`@warnv`](@ref), [`@errorv`](@ref), and [`@logmsgv`](@ref).
92
+ For convenience, a `group` keyword argument can be passed which also
93
+ filters logging messages on the "group". By default, the group is the
94
+ file name of the log macro call site, but can be overridden by passing
95
+ the `_group` keyword argument to the logging macros.
87
96
88
97
!!! note
89
98
@@ -95,11 +104,24 @@ filters the "verbose logging" messages; see [`@debugv`](@ref), [`@infov`](@ref),
95
104
For more control directly construct the logger you want by making use of
96
105
[`LevelOverrideLogger`](@ref) and then use `with_logger` to make it active.
97
106
"""
98
- function withlevel (f, level:: Union{Int, LogLevel} = Info; verbosity:: Integer = 0 )
99
- with_logger (EarlyFilteredLogger (
100
- args -> ! (args. group isa Verbosity) || verbosity >= args. group. verbosity,
101
- propagate_level_override (level, current_logger ()))
102
- ) do
103
- f ()
107
+ function withlevel (f, level:: Union{Int, LogLevel} = Info; verbosity:: Integer = 0 , group:: Union{Symbol, Nothing} = nothing )
108
+ if verbosity > 0
109
+ deprecate_verbosity (:withlevel )
110
+ end
111
+ verbosity > 0 && group != = nothing && throw (ArgumentError (" Cannot specify both verbosity and group" ))
112
+ if group === nothing
113
+ with_logger (EarlyFilteredLogger (
114
+ args -> ! (args. group isa Verbosity) || verbosity >= args. group. verbosity,
115
+ propagate_level_override (level, current_logger ()))
116
+ ) do
117
+ f ()
118
+ end
119
+ else
120
+ with_logger (EarlyFilteredLogger (
121
+ args -> args. group === group,
122
+ propagate_level_override (level, current_logger ())
123
+ )) do
124
+ f ()
125
+ end
104
126
end
105
127
end
0 commit comments