-- Singleton object to deal with log messages class log log: (message, tags, level) -> tags = tags or {} if not level error("Level is required") tag_rev = {tag,true for tag in *tags} chunk = level: level time: os.clock! message: message tags: tag_rev for observer in *log.observers observer(chunk) reset: -> log.observers = {} debug: (message, tags) -> --log.log(message, tags, "debug") info: (message, tags) -> log.log(message, tags, "info") warn: (message, tags) -> log.log(message, tags, "warn") error: (message, tags) -> log.log(message, tags, "error") -- We can't call error() here, see preload.lua panic: (message, tags) -> log.log(message, tags, "panic") -- Can't call error() here either. listen: (callback) -> table.insert(log.observers, callback) #log.observers defen: (n) -> table.remove(log.observers, n) log.reset() log