Class: Yell::Adapters::Base

Inherits:
Monitor
  • Object
show all
Includes:
Helpers::Base, Helpers::Level
Defined in:
lib/yell/adapters/base.rb

Overview

This class provides the basic interface for all allowed operations on any adapter implementation. Other adapters should inherit from it for the methods used by the Logger.

Writing your own adapter is really simple. Inherit from the base class and use the ‘setup`, `write` and `close` methods. Yell requires the `write` method to be specified (`setup` and `close` are optional).

The following example shows how to define a basic Adapter to format and print log events to STDOUT:

class PutsAdapter < Yell::Adapters::Base
  include Yell::Formatter::Helpers

  setup do |options|
    self.format = options[:format]
  end

  write do |event|
    message = format.call(event)

    STDOUT.puts message
  end
end

After the Adapter has been written, we need to register it to Yell:

Yell::Adapters.register :puts, PutsAdapter

Now, we can use it like so:

logger = Yell.new :puts
logger.info "Hello World!"

Direct Known Subclasses

Io

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers::Level

#level, #level=

Constructor Details

#initialize(options = {}, &block) ⇒ Base

Initializes a new Adapter.

You should not overload the constructor, use #setup instead.



136
137
138
139
140
141
142
143
144
# File 'lib/yell/adapters/base.rb', line 136

def initialize( options = {}, &block )
  super() # init the monitor superclass

  reset!
  setup!(options)

  # eval the given block
  block.arity > 0 ? block.call(self) : instance_eval(&block) if block_given?
end

Class Method Details

.close(&block) ⇒ Object

Define your close method with this helper.

Examples:

Closing a file handle

close do
  @stream.close
end


82
83
84
# File 'lib/yell/adapters/base.rb', line 82

def close( &block )
  compile!(:close!, &block)
end

.open(&block) ⇒ Object

Define your open method with this helper.

Examples:

Open a file handle

open do
  @stream = ::File.open( 'test.log', ::File::WRONLY|::File::APPEND|::File::CREAT )
end


72
73
74
# File 'lib/yell/adapters/base.rb', line 72

def open( &block )
  compile!(:open!, &block)
end

.setup(&block) ⇒ Object

Setup your adapter with this helper method.

Examples:

setup do |options|
  @file_handle = File.new( '/dev/null', 'w' )
end


52
53
54
# File 'lib/yell/adapters/base.rb', line 52

def setup( &block )
  compile!(:setup!, &block)
end

.write(&block) ⇒ Object

Define your write method with this helper.

Examples:

Printing messages to file

write do |event|
  @file_handle.puts event.message
end


62
63
64
# File 'lib/yell/adapters/base.rb', line 62

def write( &block )
  compile!(:write!, &block)
end

Instance Method Details

#closeObject

Close the adapter (stream, connection, etc).

Adapter classes should provide their own implementation of this method.



163
164
165
# File 'lib/yell/adapters/base.rb', line 163

def close
  close!
end

#inspectObject

Get a pretty string representation of the adapter, including



168
169
170
171
# File 'lib/yell/adapters/base.rb', line 168

def inspect
  inspection = inspectables.map { |m| "#{m}: #{send(m).inspect}" }
  "#<#{self.class.name} #{inspection * ', '}>"
end

#write(event) ⇒ Object

The main method for calling the adapter.

The method receives the log ‘event` and determines whether to actually write or not.



150
151
152
153
154
155
156
157
# File 'lib/yell/adapters/base.rb', line 150

def write( event )
  synchronize { write!(event) } if write?(event)
rescue Exception => e
  # make sure the adapter is closed and re-raise the exception
  synchronize { close }

  raise(e)
end