Skip to content

Commit 9e3d785

Browse files
add a lock to SimpleLogger and ConsoleLogger
and use for maxlog and stream writes
1 parent 14b8ff6 commit 9e3d785

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

base/logging/ConsoleLogger.jl

Lines changed: 11 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,7 @@ function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module
184187
println(iob)
185188
end
186189

187-
write(stream, take!(buf))
190+
b = take!(buf)
191+
@lock logger.lock write(stream, b)
188192
nothing
189193
end

base/logging/logging.jl

Lines changed: 10 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,8 @@ 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+
b = take!(buf)
713+
@lock logger.lock write(stream, b)
710714
nothing
711715
end
712716

0 commit comments

Comments
 (0)