@@ -26,20 +26,31 @@ mutable struct TestLogger <: AbstractLogger
26
26
min_level:: LogLevel
27
27
catch_exceptions:: Bool
28
28
shouldlog_args
29
+ message_limits:: Dict{Any,Int}
29
30
end
30
31
31
32
TestLogger (; min_level= Info, catch_exceptions= false ) =
32
- TestLogger (LogRecord[], min_level, catch_exceptions, nothing )
33
+ TestLogger (LogRecord[], min_level, catch_exceptions, nothing , Dict {Any, Int} () )
33
34
Logging. min_enabled_level (logger:: TestLogger ) = logger. min_level
34
35
35
36
function Logging. shouldlog (logger:: TestLogger , level, _module, group, id)
36
- logger. shouldlog_args = (level, _module, group, id)
37
- true
37
+ if get (logger. message_limits, id, 1 ) > 0
38
+ logger. shouldlog_args = (level, _module, group, id)
39
+ true
40
+ else
41
+ false
42
+ end
38
43
end
39
44
40
45
function Logging. handle_message (logger:: TestLogger , level, msg, _module,
41
46
group, id, file, line; kwargs... )
42
47
@nospecialize
48
+ maxlog = get (kwargs, :maxlog , nothing )
49
+ if maxlog isa Core. BuiltinInts
50
+ remaining = get! (logger. message_limits, id, Int (maxlog):: Int )
51
+ logger. message_limits[id] = remaining - 1
52
+ remaining > 0 || return
53
+ end
43
54
push! (logger. logs, LogRecord (level, msg, _module, group, id, file, line, kwargs))
44
55
end
45
56
0 commit comments