Created
April 11, 2018 14:38
-
-
Save bcardiff/c5126a9c19fe36987819bc6e86ea7d3f to your computer and use it in GitHub Desktop.
Logger POC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Logger2 | |
enum Severity | |
DEBUG | |
INFO | |
end | |
abstract def log(severity, message, context) | |
macro using(context, forward = nil) | |
getter logger : Logger2? | |
def logger=(value : Logger2?) | |
@logger = value | |
{% if forward %} | |
{% for component in forward %} | |
{{component.id}}.try &.logger=(value) | |
{% end %} | |
{% end %} | |
end | |
protected def log(severity, message) | |
logger.try &.log(severity, message, {{context}}) | |
end | |
{% for name in Logger2::Severity.constants %} | |
protected def {{name.id.downcase}}(message) | |
log(Logger2::Severity::{{name.id}}, message) | |
end | |
{% end %} | |
end | |
end | |
class BasicLogger | |
include Logger2 | |
property level = Logger2::Severity::INFO | |
def initialize(@io : IO = STDOUT) | |
end | |
def log(severity, message, context) | |
return if severity < level | |
label = severity.to_s | |
@io << label[0] << ", [" << Time.now << " #" << Process.pid << "] " | |
@io << label.rjust(5) << " -- " << ": " << message.to_s | |
@io.puts | |
@io.flush | |
end | |
end | |
class Foo | |
Logger2.using "app.foo", forward: [@bar] | |
@bar = Bar.new | |
def do | |
info "doing do" | |
@bar.do_to | |
end | |
end | |
class Bar | |
Logger2.using "app.bar" | |
def do_to | |
debug "doing do to" | |
end | |
end | |
foo = Foo.new | |
# loggers are optional | |
puts "** A" | |
foo.do | |
# loggers are forwarded to components already initialized | |
puts "** B" | |
logger = BasicLogger.new | |
foo.logger = logger | |
foo.do | |
# since loggers reference are shared | |
puts "** C" | |
logger.level = Logger2::Severity::DEBUG | |
foo.do |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment