22 lines
527 B
Ruby
22 lines
527 B
Ruby
|
|
require "time"
|
||
|
|
require_relative "result"
|
||
|
|
|
||
|
|
module Relay
|
||
|
|
# Append-only event log. Every recorded event carries the moment it
|
||
|
|
# happened as a UTC ISO-8601 string.
|
||
|
|
class Log
|
||
|
|
def initialize(path)
|
||
|
|
@path = path
|
||
|
|
end
|
||
|
|
|
||
|
|
def record(event, detail = nil)
|
||
|
|
stamp = Time.now.utc.iso8601
|
||
|
|
line = [stamp, event, detail].compact.join("\t")
|
||
|
|
File.open(@path, "a") { |f| f.puts(line) }
|
||
|
|
Result.ok(line)
|
||
|
|
rescue SystemCallError => e
|
||
|
|
Result.err("log write failed: #{e.message}")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|