diff --git a/src/loggers.jl b/src/loggers.jl index 38d28b0..8838bf8 100644 --- a/src/loggers.jl +++ b/src/loggers.jl @@ -333,13 +333,13 @@ method with a `@sync` in order to synchronize all handler tasks. * `args::Dict`: a dict of msg fields and values that should be passed to `logger.record`. """ function log(logger::Logger, rec::Record) - @sync for l in reverse!(getpath(logger)) + for l in reverse!(getpath(logger)) # If none of the `Filter`s return false we're good to log our record. !all(f -> f(rec), getfilters(l)) && break # Log to all of our handlers for (name, handler) in l.handlers - @async log(handler, rec) + log(handler, rec) end # Break if this is the root logger or it's non-propagating diff --git a/test/loggers.jl b/test/loggers.jl index 9bb0224..29dacac 100644 --- a/test/loggers.jl +++ b/test/loggers.jl @@ -202,4 +202,34 @@ Memento.config("notice"; recursive=true) @test all(l -> getlevel(l) == "notice", values(Memento._loggers)) end + + @testset "Stacktraces" begin + io = IOBuffer() + + try + handler = DefaultHandler( + io, + DefaultFormatter(string(FMT_STR, " | {stacktrace}")) + ) + + logger = Logger( + "Logger.example", + Dict("Buffer" => handler), + "info", + LEVELS, + DefaultRecord, + true + ) + + # Define a test function that logs a message + test_func() = info(logger, "Hello") + test_func() + + msg = String(take!(io)) + @test !isempty(msg) + @test occursin("test_func", msg) + finally + close(io) + end + end end