Skip to content

Commit

Permalink
access to loggers by a key
Browse files Browse the repository at this point in the history
  • Loading branch information
andrew2net committed Jul 2, 2024
1 parent 8b3ea77 commit 36f5992
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 27 deletions.
20 changes: 12 additions & 8 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,26 @@ Relaton.logger_pool.error("progname", key: "KEY") { "message" }
[progname] ERROR: (KEY) message
----

The logger pool can configured to contain multiple loggers. The loggers in the pool are called in the order they are added to the pool. To add a logger to the pool, call the `<<` method of the logger pool and pass the logger as an argument.
The logger pool can be configured to contain multiple loggers. Initially, there is one `:default` logger. Any instance of loggers in the logger pool are accessible with `[]` method. To add or replace a logger use `[]=` method of the logger pool and pass the logger as an argument. The loggers in the pool are called in the order they are added to the pool.

[source, ruby]
----
Relaton::Logger.configure do |config|
config.logger_pool << Relaton::Logger::Log.new("relaton.log", levels: [:info, :warn])
end
# Access logger
Relaton.logger_pool[:default]
=>
#<Relaton::Logger::Log:0x00000001212068c8
# Add a new logger
Relaton.logger_pool[:file] = Relaton::Logger::Log.new("relaton.log", levels: [:info, :warn])
----

To replace the loggers in the pool, use `=` method of the logger pool and pass the new loggers as an argument.
To change the log level of a logger, call the `level=` method of the logger.

[source, ruby]
----
Relaton::Logger.configure do |config|
config.logger_pool = [Relaton::Logger::Log.new("relaton.log", levels: [:info, :warn])]
end
Relaton.logger_pool[:default].levels = [:info, :warn, :error]
Relaton.logger_pool[:default].add_level :fatal
Relaton.logger_pool[:default].remove_level :warn
----

To create a new logger, call the `new` method of the `Relaton::Logger::Log` class and pass arguments:
Expand Down
2 changes: 1 addition & 1 deletion lib/relaton/logger/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Configuration

def initialize
@logger_pool ||= Pool.new
@logger_pool << Log.new($stderr, levels: %i[info warn error fatal])
@logger_pool[:default] = Log.new($stderr, levels: %i[info warn error fatal])
end

#
Expand Down
8 changes: 4 additions & 4 deletions lib/relaton/logger/pool.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
module Relaton::Logger
class Pool
extend Forwardable
def_delegators :@loggers, :<<, :[], :first, :last, :empty?, :any?, :size, :each, :detect, :length
def_delegators :@loggers, :[], :[]=, :size, :each

attr_accessor :loggers

def initialize
@loggers = []
@loggers = {}
end

def unknown(message = nil, progname = nil, **args, &block)
@loggers.each { |logger| logger.send(__callee__, message, progname, **args, &block) }
@loggers.each { |_, logger| logger.send(__callee__, message, progname, **args, &block) }
nil
end

%i[fatal error warn info debug].each { |m| alias_method m, :unknown }

def truncate
@loggers.each(&:truncate)
@loggers.each { |_, logger| logger.truncate }
nil
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/relaton/logger/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

module Relaton
module Logger
VERSION = "0.1.0"
VERSION = "0.2.0"
end
end
6 changes: 3 additions & 3 deletions spec/relaton/logger/config_spec.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
describe Relaton::Logger::Config do
it "configure" do
Relaton::Logger.configure do |conf|
conf.logger_pool = [:logger1]
conf.logger_pool << :logger2
conf.logger_pool[:default] = :logger_1
conf.logger_pool[:logger2] = :logger_2
end
expect(Relaton::Logger.configuration.logger_pool.loggers).to eq %i[logger1 logger2]
expect(Relaton::Logger.configuration.logger_pool.loggers).to eq default: :logger_1, logger2: :logger_2
end
end
12 changes: 6 additions & 6 deletions spec/relaton/logger/pool_spec.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
describe Relaton::Logger::Pool do
it "initialize" do
expect(subject.loggers).to eq []
expect(subject.loggers).to eq({})
end

it "<<" do
subject << :logger
expect(subject.loggers).to eq [:logger]
subject[:logger] = :logger
expect(subject.loggers).to eq logger: :logger
end

it "#loggers=" do
Expand All @@ -16,21 +16,21 @@
it "#unknown" do
logger = double("logger")
expect(logger).to receive(:unknown).with("msg", "prog", key: "val")
subject << logger
subject[:logger] = logger
subject.unknown "msg", "prog", key: "val"
end

it "#fatal" do
logger = double("logger")
expect(logger).to(receive(:fatal).with(nil, nil, key: "val").and_yield { "progname" })
subject << logger
subject[:logger] = logger
subject.fatal(key: "val") { "progname" }
end

it "#truncate" do
logger = double("logger")
expect(logger).to receive(:truncate)
subject << logger
subject[:logger] = logger
subject.truncate
end
end
8 changes: 4 additions & 4 deletions spec/relaton/logger_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

it "JSON" do
Relaton::Logger.configure do |config|
config.logger_pool = [Relaton::Logger::Log.new($stderr, formatter: Relaton::Logger::FormatterJSON)]
config.logger_pool[:default] = Relaton::Logger::Log.new($stderr, formatter: Relaton::Logger::FormatterJSON)
end
expect do
Relaton.logger_pool.info "Test log", "Prog Name", key: "Key"
Expand All @@ -46,7 +46,7 @@
context "log to file" do
it "use string formatter" do
Relaton::Logger.configure do |config|
config.logger_pool = [Relaton::Logger::Log.new("spec/fixtures/log.log")]
config.logger_pool[:default] = Relaton::Logger::Log.new("spec/fixtures/log.log")
end
Relaton.logger_pool.info "Test log", "Prog Name", key: "Key"
expect(File.read("spec/fixtures/log.log")).to match(/\[Prog Name\] INFO: \(Key\) Test log/)
Expand All @@ -56,7 +56,7 @@

it "use json formatter" do
Relaton::Logger.configure do |config|
config.logger_pool = [Relaton::Logger::Log.new("spec/fixtures/log.json", formatter: Relaton::Logger::FormatterJSON)]
config.logger_pool[:default] = Relaton::Logger::Log.new("spec/fixtures/log.json", formatter: Relaton::Logger::FormatterJSON)
end
Relaton.logger_pool.truncate
expect(File.read("spec/fixtures/log.json")).to eq ""
Expand All @@ -73,7 +73,7 @@
it "truncate" do
io = StringIO.new
Relaton::Logger.configure do |config|
config.logger_pool = [Relaton::Logger::Log.new(io)]
config.logger_pool[:default] = Relaton::Logger::Log.new(io)
end
Relaton.logger_pool.info "info"
Relaton.logger_pool.warn "warn"
Expand Down

0 comments on commit 36f5992

Please sign in to comment.