Skip to content

Commit 86f12ec

Browse files
add a lock to SimpleLogger and ConsoleLogger
and use for maxlog and stream writes
1 parent 2dd4cdf commit 86f12ec

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

base/logging/ConsoleLogger.jl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,24 @@ struct ConsoleLogger <: AbstractLogger
2929
show_limited::Bool
3030
right_justify::Int
3131
message_limits::Dict{Any,Int}
32+
lock::ReentrantLock
3233
end
3334
function ConsoleLogger(stream::IO, min_level=Info;
3435
meta_formatter=default_metafmt, show_limited=true,
3536
right_justify=0)
3637
ConsoleLogger(stream, min_level, meta_formatter,
37-
show_limited, right_justify, Dict{Any,Int}())
38+
show_limited, right_justify, Dict{Any,Int}(), ReentrantLock())
3839
end
3940
function ConsoleLogger(min_level=Info;
4041
meta_formatter=default_metafmt, show_limited=true,
4142
right_justify=0)
4243
ConsoleLogger(closed_stream, min_level, meta_formatter,
43-
show_limited, right_justify, Dict{Any,Int}())
44+
show_limited, right_justify, Dict{Any,Int}(), ReentrantLock())
4445
end
4546

4647

4748
shouldlog(logger::ConsoleLogger, level, _module, group, id) =
48-
get(logger.message_limits, id, 1) > 0
49+
@lock logger.lock get(logger.message_limits, id, 1) > 0
4950

5051
min_enabled_level(logger::ConsoleLogger) = logger.min_level
5152

@@ -109,9 +110,11 @@ function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module
109110
hasmaxlog = haskey(kwargs, :maxlog) ? 1 : 0
110111
maxlog = get(kwargs, :maxlog, nothing)
111112
if maxlog isa Core.BuiltinInts
112-
remaining = get!(logger.message_limits, id, Int(maxlog)::Int)
113-
logger.message_limits[id] = remaining - 1
114-
remaining > 0 || return
113+
@lock logger.lock begin
114+
remaining = get!(logger.message_limits, id, Int(maxlog)::Int)
115+
logger.message_limits[id] = remaining - 1
116+
remaining > 0 || return
117+
end
115118
end
116119

117120
# Generate a text representation of the message and all key value pairs,
@@ -184,6 +187,6 @@ function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module
184187
println(iob)
185188
end
186189

187-
write(stream, take!(buf))
190+
@lock logger.lock write(stream, take!(buf))
188191
nothing
189192
end

base/logging/logging.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -668,12 +668,13 @@ struct SimpleLogger <: AbstractLogger
668668
stream::IO
669669
min_level::LogLevel
670670
message_limits::Dict{Any,Int}
671+
lock::ReentrantLock
671672
end
672-
SimpleLogger(stream::IO, level=Info) = SimpleLogger(stream, level, Dict{Any,Int}())
673+
SimpleLogger(stream::IO, level=Info) = SimpleLogger(stream, level, Dict{Any,Int}(), ReentrantLock())
673674
SimpleLogger(level=Info) = SimpleLogger(closed_stream, level)
674675

675676
shouldlog(logger::SimpleLogger, level, _module, group, id) =
676-
get(logger.message_limits, id, 1) > 0
677+
@lock logger.lock get(logger.message_limits, id, 1) > 0
677678

678679
min_enabled_level(logger::SimpleLogger) = logger.min_level
679680

@@ -684,9 +685,11 @@ function handle_message(logger::SimpleLogger, level::LogLevel, message, _module,
684685
@nospecialize
685686
maxlog = get(kwargs, :maxlog, nothing)
686687
if maxlog isa Core.BuiltinInts
687-
remaining = get!(logger.message_limits, id, Int(maxlog)::Int)
688-
logger.message_limits[id] = remaining - 1
689-
remaining > 0 || return
688+
@lock logger.lock begin
689+
remaining = get!(logger.message_limits, id, Int(maxlog)::Int)
690+
logger.message_limits[id] = remaining - 1
691+
remaining > 0 || return
692+
end
690693
end
691694
buf = IOBuffer()
692695
stream::IO = logger.stream
@@ -706,7 +709,7 @@ function handle_message(logger::SimpleLogger, level::LogLevel, message, _module,
706709
println(iob, "", key, " = ", val)
707710
end
708711
println(iob, "└ @ ", _module, " ", filepath, ":", line)
709-
write(stream, take!(buf))
712+
@lock logger.lock write(stream, take!(buf))
710713
nothing
711714
end
712715

0 commit comments

Comments
 (0)