module SemanticLogger # Manage a collection of appenders. class Appenders < Concurrent::Array def close closed_appenders = [] each do |appender| logger.trace "Closing appender: #{appender.name}" closed_appenders << appender appender.flush appender.close rescue Exception => e logger.error "Failed to close appender: #{appender.name}", e end # Delete appenders outside the #each above which prevents changes during iteration. closed_appenders.each { |appender| delete(appender) } logger.trace 'All appenders closed and removed from appender list' end end end