class Console::Serialized::Logger

def call(subject = nil, *arguments, severity: UNKNOWN, **options, &block)

def call(subject = nil, *arguments, severity: UNKNOWN, **options, &block)
	record = {
		time: Time.now.iso8601,
		severity: severity,
		class: subject.class,
		oid: subject.object_id,
		pid: Process.pid,
	}
	
	if subject
		record[:subject] = subject
	end
	
	if arguments.any?
		record[:arguments] = arguments
	end
	
	if options.any?
		record[:options] = options
	end
	
	if block_given?
		if block.arity.zero?
			record[:message] = yield
		else
			buffer = StringIO.new
			yield buffer
			record[:message] = buffer.string
		end
	end
	
	@io.puts(self.dump(record))
end

def dump(record)

def dump(record)
	@format.dump(record)
end

def initialize(io = $stderr, format: JSON, verbose: false, **options)

def initialize(io = $stderr, format: JSON, verbose: false, **options)
	@io = io
	@start = Time.now
	@format = format
	@verbose = verbose
end

def verbose!(value = true)

def verbose!(value = true)
	@verbose = true
end