@@ -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,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 
189192end 
0 commit comments