core/logger.rb
module Rubinius
class Logger
attr_accessor :name
attr_accessor :format
def self.allocate
Rubinius.primitive :logger_allocate
raise PrimitiveFailure, "Rubinius::Logger.allocate failed"
end
def self.system
@system_logger ||= new "system"
end
def self.log_exception(message, e)
log = system
exception = e
exceptions = []
while exception
exceptions.unshift exception
exception = exception.cause
end
color = STDERR.tty?
while exception = exceptions.shift
if custom_trace = exception.custom_backtrace
msg = "User-defined backtrace:"
log.error msg
STDERR.puts msg
custom_trace.reverse_each do |line|
log.error line
STDERR.puts line
end
msg = "Backtrace: "
log.error msg
STDERR.puts "\n", msg, "\n"
end
exception.backtrace.reverse_each { |line| log.error line }
STDERR.puts exception.awesome_backtrace.show("\n", color)
msg = "#{exception.message} (#{exception.class})"
log.error msg
STDERR.puts "\n", msg
unless exceptions.empty?
msg = "Causing:"
log.error msg
STDERR.puts "\n", msg, "\n"
end
end
log.error message
STDERR.puts "\n", message
end
def initialize(name)
@name = name
@format = "#{name}: %s"
end
private :initialize
def write(message)
Rubinius.primitive :logger_write
raise PrimitiveFailure, "Rubinius::Logger#write primitive failed"
end
def fatal(message)
Rubinius.primitive :logger_fatal
raise PrimitiveFailure, "Rubinius::Logger#fatal primitive failed"
end
def error(message)
Rubinius.primitive :logger_error
raise PrimitiveFailure, "Rubinius::Logger#error primitive failed"
end
def warn(message)
Rubinius.primitive :logger_warn
raise PrimitiveFailure, "Rubinius::Logger#warn primitive failed"
end
def info(message)
Rubinius.primitive :logger_info
raise PrimitiveFailure, "Rubinius::Logger#info primitive failed"
end
def debug(message)
Rubinius.primitive :logger_debug
raise PrimitiveFailure, "Rubinius::Logger#debug primitive failed"
end
end
end