From d90e616f1dca3b82369aac508e4f98683d905a60 Mon Sep 17 00:00:00 2001 From: Marnix Kraus Date: Mon, 18 Dec 2023 18:38:51 +0100 Subject: [PATCH] Insert stream to avoid name conflicts Close the stream as supposed to in main and tests --- core/src/logging.jl | 20 +++------------ core/src/main.jl | 9 ++++--- core/test/logging_test.jl | 53 +++++++++++++++++++++------------------ 3 files changed, 37 insertions(+), 45 deletions(-) diff --git a/core/src/logging.jl b/core/src/logging.jl index 010b4d436..7e65f03e6 100644 --- a/core/src/logging.jl +++ b/core/src/logging.jl @@ -13,14 +13,12 @@ function is_current_module(log::LogMessageType)::Bool log._module == OrdinaryDiffEq# for the progress bar end -function setup_logger( - config::Config; +function setup_logger(; + verbosity::LogLevel, + stream::IOStream, module_filter_function::Function = is_current_module, )::AbstractLogger - file_logger = LoggingExtras.MinLevelLogger( - LoggingExtras.FileLogger(results_path(config, "ribasim.log")), - config.logging.verbosity, - ) + file_logger = LoggingExtras.MinLevelLogger(LoggingExtras.FileLogger(stream), verbosity) terminal_logger = LoggingExtras.MinLevelLogger( TerminalLogger(), LogLevel(-1), # To include progress bar @@ -30,13 +28,3 @@ function setup_logger( LoggingExtras.TeeLogger(file_logger, terminal_logger), ) end - -function close(logger::AbstractLogger) - if hasfield(typeof(logger), :logger) - close(logger.logger) - elseif hasfield(typeof(logger), :loggers) - foreach(close, logger.loggers) - elseif hasfield(typeof(logger), :stream) && logger isa SimpleLogger # FileLogger contains a SimpleLogger that contains the Stream. - Base.close(logger.stream) - end -end diff --git a/core/src/main.jl b/core/src/main.jl index c017b5454..b9d00e6b6 100644 --- a/core/src/main.jl +++ b/core/src/main.jl @@ -24,11 +24,12 @@ function main(ARGS)::Cint try # show progress bar in terminal config = Config(arg) - logger = setup_logger(config) - model = with_logger(logger) do - Ribasim.run(config) + open(results_path(config, "ribasim.log"), "w") do io + logger = Ribasim.setup_logger(; verbosity = config.verbosity, stream = io) + model = with_logger(logger) do + Ribasim.run(config) + end end - Ribasim.close(logger) return if successful_retcode(model) println("The model finished successfully") 0 diff --git a/core/test/logging_test.jl b/core/test/logging_test.jl index a9e9edf49..de687a85e 100644 --- a/core/test/logging_test.jl +++ b/core/test/logging_test.jl @@ -8,13 +8,14 @@ ) config = Ribasim.Config(normpath(dir, "ribasim.toml")) mkdir(Ribasim.results_path(config, ".")) - logger = Ribasim.setup_logger(config) - @test Logging.shouldlog(logger, Logging.Error, Ribasim, :group, :message) - @test Logging.shouldlog(logger, Logging.Info, Ribasim, :group, :message) - @test Logging.shouldlog(logger, Logging.Info - 1, Ribasim, :group, :message) # progress bar - @test !Logging.shouldlog(logger, Logging.Debug, Ribasim, :group, :message) - - Ribasim.close(logger) + open(Ribasim.results_path(config, "ribasim.log"), "w") do io + logger = + Ribasim.setup_logger(; verbosity = config.logging.verbosity, stream = io) + @test Logging.shouldlog(logger, Logging.Error, Ribasim, :group, :message) + @test Logging.shouldlog(logger, Logging.Info, Ribasim, :group, :message) + @test Logging.shouldlog(logger, Logging.Info - 1, Ribasim, :group, :message) # progress bar + @test !Logging.shouldlog(logger, Logging.Debug, Ribasim, :group, :message) + end end end @@ -28,13 +29,14 @@ end ) config = Ribasim.Config(normpath(dir, "ribasim.toml")) mkdir(Ribasim.results_path(config, ".")) - logger = Ribasim.setup_logger(config) - @test Logging.shouldlog(logger, Logging.Error, Ribasim, :group, :message) - @test Logging.shouldlog(logger, Logging.Info, Ribasim, :group, :message) - @test Logging.shouldlog(logger, Logging.Info - 1, Ribasim, :group, :message) # progress bar - @test Logging.shouldlog(logger, Logging.Debug, Ribasim, :group, :message) - - Ribasim.close(logger) + open(Ribasim.results_path(config, "ribasim.log"), "w") do io + logger = + Ribasim.setup_logger(; verbosity = config.logging.verbosity, stream = io) + @test Logging.shouldlog(logger, Logging.Error, Ribasim, :group, :message) + @test Logging.shouldlog(logger, Logging.Info, Ribasim, :group, :message) + @test Logging.shouldlog(logger, Logging.Info - 1, Ribasim, :group, :message) # progress bar + @test Logging.shouldlog(logger, Logging.Debug, Ribasim, :group, :message) + end end end @@ -49,20 +51,21 @@ end ) config = Ribasim.Config(normpath(dir, "ribasim.toml")) mkdir(Ribasim.results_path(config, ".")) - logger = Ribasim.setup_logger( - config; - module_filter_function = log::Ribasim.LogMessageType -> - log._module == @__MODULE__, - ) + open(Ribasim.results_path(config, "ribasim.log"), "w") do io + logger = Ribasim.setup_logger(; + verbosity = Logging.Debug, + stream = io, + module_filter_function = log::Ribasim.LogMessageType -> + log._module == @__MODULE__, + ) - with_logger(logger) do - @info "foo" - @warn "bar" - @debug "baz" + with_logger(logger) do + @info "foo" + @warn "bar" + @debug "baz" + end end - Ribasim.close(logger) - open(normpath(dir, "results", "ribasim.log"), "r") do io result = read(io, String) @test occursin("Info: foo", result)