@@ -29,23 +29,24 @@ struct ConsoleLogger <: AbstractLogger
2929 show_limited:: Bool
3030 right_justify:: Int
3131 message_limits:: Dict{Any,Int}
32+ lock:: ReentrantLock
3233end
3334function 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 () )
3839end
3940function 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 () )
4445end
4546
4647
4748shouldlog (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
5051min_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
189193end
0 commit comments