Class: Needle::Logger

### Home Classes Methods

### In Files

- lib/needle/logger.rb

### Parent

Logger

### Methods

- #message_format=
- #progname=
- #write_to

### Files

- README

### Class/Module Index

Quicksearch

- Needle
- Needle::Bug
- Needle::Container
- Needle::DefinitionContext
- Needle::IncludeExclude
- Needle::Interceptor
- Needle::Interceptor::DynamicInterceptor
- Needle::InterceptorChainBuilder
- Needle::InterceptorChainBuilder::InterceptedServiceProxy
- Needle::InterceptorChainBuilder::InterceptorChainElement
- Needle::InterceptorChainBuilder::ProxyObjectChainElement
- Needle::InterceptorConfigurationError
- Needle::Lifecycle
- Needle::Lifecycle::Deferred
- Needle::Lifecycle::Initialize
- Needle::Lifecycle::Multiton
- Needle::Lifecycle::Proxy
- Needle::Lifecycle::Singleton
- Needle::Lifecycle::Threaded
- Needle::LogFactory
- Needle::Logger
- Needle::LoggingInterceptor
- Needle::NeedleError
- Needle::Pipeline
- Needle::Pipeline::Collection
- Needle::Pipeline::Collection::BlockElement
- Needle::Pipeline::Element
- Needle::Pipeline::InterceptorElement
- Needle::QueryableMutex
- Needle::Registry
- Needle::ServiceNotFound
- Needle::ServicePoint
- Needle::Version

No matching classes.

# Needle::Logger

A specialization of the standard Logger class that comes with Ruby. This provides the additional functionality of a fully-customizable message format, whereas the original only provided a customizable date format.

### Constants

SPECIFIER_OPTIONS

  The map of specifier options supported by this class.

SPECIFIER_PATTERN

  The regular expression for matching specifier patterns in the format strings.

### Attributes

message_format[R]

The format string for the message (`nil` if the default should be used)

name[R]

The brief name of this logger (derived from progname).

### Public Instance Methods

message_format=( format ) click to toggle source

Set the message format string to the given string. This also pre-parses the format for faster processing.

The format string is a printf-formatted string, which supports the following format specifiers:

c | the unqualified name of the logger
C | the fully-qualified name of the logger
d | the date/time string (as formatted by the datetime_format string)
F | the filename of the calling routine
l | the location of the calling routine
L | the line number of the calling routine
m | the message to log
M | the name of the calling method
n | the newline character
p | the name of the priority (or severity) used to log this method
t | the id of the current thread
% | a percentage character
P | the progname that was passed to the logger method
$ | the current process id

    # File lib/needle/logger.rb, line 104
    def message_format=( format )
      @message_format = format
      return unless format

      @needs_caller_info = false

      format_string = ""
      format_parameters = []

      @message_format_tokens = []
      format.scan( SPECIFIER_PATTERN ) do |v|
        format_string << v[0] if v[0].length > 0
        opts = SPECIFIER_OPTIONS[ v[2] ]
        format_string << "%#{v[1]}#{opts[:type]}"
        format_parameters << opts[:value]
        @needs_caller_info = true if v[2] =~ /[FlLM]/
      end
      format_string << $' if $'.length > 0
      format_string << "\n"

      definition =
        "proc { |opts| #{format_string.inspect} " +
        "% [ #{format_parameters.join(',')} ] }"
      @message_formatter = eval( definition )
    end

progname=( progname ) click to toggle source

Extracts the unqualified name from the progname, after setting the progname.

    # File lib/needle/logger.rb, line 58
    def progname=( progname )
      super
      @name = progname.split( /\./ ).last
    end

write_to( device, shift_age = 0, shift_size = 1048576 ) click to toggle source

Changes the device that the given logger writes to, to be the given device. Does so in a thread-safe manner.

    # File lib/needle/logger.rb, line 65
    def write_to( device, shift_age = 0, shift_size = 1048576 )
      saved_critical = Thread.critical
      Thread.critical = true

      if device
        if device.respond_to?( :write ) && device.respond_to?( :close )
          @logdev = device
        else
          @logdev = Logger::LogDevice.new( device,
            :shift_age => shift_age,
            :shift_size => shift_size )
        end
      end

      device
    ensure
      Thread.critical = saved_critical
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.