stdlib_libraries/logging_and_scratch_files.rb
tests/_examples/stdlib_libraries/logging_and_scratch_files.rb in the metorex repository.
# A log with a severity on each message, a monitor that guards a section of
# code, and a scratch file that is removed when it is closed.
require 'logger'
require 'monitor'
require 'tempfile'
path = File.join Dir.tmpdir, "metorex_logging_#{Process.pid}.log"
File.delete path if File.exist? path
log = Logger.new path
log.level = Logger::WARN
p log.level
p log.warn?
p log.debug?
log.add Logger::WARN, "written"
log.add Logger::DEBUG, "below the level"
log.close
lines = File.readlines path
p lines.length
p lines.last.include?("WARN -- : written")
File.delete path
# A severity may be named rather than numbered.
named = Logger.new path, level: :error
p named.level
named.close
File.delete path
# A monitor may be entered more than once by the same thread, and refuses to
# be left by anyone who is not holding it.
guard = Monitor.new
p guard.mon_locked?
guard.synchronize do
guard.synchronize do
p guard.mon_locked?
p guard.mon_owned?
end
end
p guard.mon_locked?
begin
guard.exit
rescue ThreadError => problem
p problem.class
end
# A scratch file has a name nobody else is using.
scratch = Tempfile.new "example"
p File.exist? scratch.path
scratch.puts "held"
scratch.close
p File.exist? scratch.path
scratch.unlink
p scratch.path
Output:
2
true
false
2
true
3
false
true
true
false
ThreadError
true
true
nil