Class: Log4jruby::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/log4jruby/logger.rb

Overview

Author

Lenny Marks

Wrapper around org.apache.log4j.Logger with interface similar to standard ruby Logger.

  • Ruby and Java exceptions are logged with backtraces.

  • fileName, lineNumber, methodName available to appender layouts via MDC variables(e.g. %XlineNumber)

Constant Summary collapse

LOG4J_LEVELS =
{
    Java::org.apache.log4j.Level::DEBUG => ::Logger::DEBUG,
    Java::org.apache.log4j.Level::INFO => ::Logger::INFO,
    Java::org.apache.log4j.Level::WARN => ::Logger::WARN,
    Java::org.apache.log4j.Level::ERROR => ::Logger::ERROR,
    Java::org.apache.log4j.Level::FATAL => ::Logger::FATAL,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#formatterObject

::Logger::Formatter



27
28
29
# File 'lib/log4jruby/logger.rb', line 27

def formatter
  @formatter
end

#tracingObject

turn tracing on to make fileName, lineNumber, and methodName available to appender layout through MDC(ie. %XfileName %XlineNumber %XmethodName)



24
25
26
# File 'lib/log4jruby/logger.rb', line 24

def tracing
  @tracing
end

Class Method Details

.[](name) ⇒ Object

get Logger for name



31
32
33
34
35
# File 'lib/log4jruby/logger.rb', line 31

def[](name)
  name = name.nil? ? 'jruby' : "jruby.#{name.gsub('::', '.')}"
  log4j = Java::org.apache.log4j.Logger.getLogger(name)
  fetch_logger(log4j)
end

.get(name, values = {}) ⇒ Object

same as [] but accepts attributes



38
39
40
41
42
# File 'lib/log4jruby/logger.rb', line 38

def get(name, values = {})
  logger = self[name]
  logger.attributes = values
  logger
end

.resetObject

:nodoc:



50
51
52
53
54
# File 'lib/log4jruby/logger.rb', line 50

def reset # :nodoc:
  Java::org.apache.log4j.LogManager.getCurrentLoggers.each do |l|
    l.ruby_logger = nil
  end
end

.rootObject

Return root Logger(i.e. jruby)



45
46
47
48
# File 'lib/log4jruby/logger.rb', line 45

def root
  log4j = Java::org.apache.log4j.Logger.getLogger('jruby')
  fetch_logger(log4j)
end

Instance Method Details

#attributes=(values) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/log4jruby/logger.rb', line 63

def attributes=(values)
  if values
    values.each_pair do |k, v|
      setter = "#{k}="
      send(setter, v) if respond_to?(setter)
    end
  end
end

#debug(object = nil, &block) ⇒ Object



98
99
100
101
102
# File 'lib/log4jruby/logger.rb', line 98

def debug(object = nil, &block)
  if debug?
    send_to_log4j(:debug, object, nil, &block)
  end
end

#debug?Boolean

Returns:

  • (Boolean)


137
138
139
# File 'lib/log4jruby/logger.rb', line 137

def debug?
  @logger.isEnabledFor(Java::org.apache.log4j.Priority::DEBUG)
end

#effective_formatterObject



160
161
162
163
164
165
166
167
168
169
# File 'lib/log4jruby/logger.rb', line 160

def effective_formatter
  return @formatter if defined?(@formatter)
  @formatter = begin
    if @formatter.nil? && self != Logger.root
      parent.formatter
    else
      @formatter
    end
  end
end

#error(object = nil, &block) ⇒ Object



116
117
118
# File 'lib/log4jruby/logger.rb', line 116

def error(object = nil, &block)
  send_to_log4j(:error, object, nil, &block)
end

#fatal(object = nil, &block) ⇒ Object



124
125
126
# File 'lib/log4jruby/logger.rb', line 124

def fatal(object = nil, &block)
  send_to_log4j(:fatal, object, nil, &block)
end

#flushObject



94
95
96
# File 'lib/log4jruby/logger.rb', line 94

def flush
  #rails compatability
end

#info(object = nil, &block) ⇒ Object



104
105
106
107
108
# File 'lib/log4jruby/logger.rb', line 104

def info(object = nil, &block)
  if info?
    send_to_log4j(:info, object, nil, &block)
  end
end

#info?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'lib/log4jruby/logger.rb', line 141

def info?
  @logger.isEnabledFor(Java::org.apache.log4j.Priority::INFO)
end

#levelObject



90
91
92
# File 'lib/log4jruby/logger.rb', line 90

def level
  LOG4J_LEVELS[@logger.effectiveLevel]
end

#level=(level) ⇒ Object

Shortcut for setting log levels. (:debug, :info, :warn, :error, :fatal)



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/log4jruby/logger.rb', line 73

def level=(level)
  @logger.level = case level
  when :debug, ::Logger::DEBUG
    Java::org.apache.log4j.Level::DEBUG
  when :info, ::Logger::INFO
    Java::org.apache.log4j.Level::INFO
  when :warn, ::Logger::WARN
    Java::org.apache.log4j.Level::WARN
  when :error, ::Logger::ERROR
    Java::org.apache.log4j.Level::ERROR
  when :fatal, ::Logger::FATAL
    Java::org.apache.log4j.Level::FATAL
  else
    raise NotImplementedError
  end
end

#log4j_loggerObject

return org.apache.log4j.Logger instance backing this Logger



133
134
135
# File 'lib/log4jruby/logger.rb', line 133

def log4j_logger
  @logger
end

#log_error(msg, error) ⇒ Object



120
121
122
# File 'lib/log4jruby/logger.rb', line 120

def log_error(msg, error)
  send_to_log4j(:error, msg, error)
end

#log_fatal(msg, error) ⇒ Object



128
129
130
# File 'lib/log4jruby/logger.rb', line 128

def log_fatal(msg, error)
  send_to_log4j(:fatal, msg, error)
end

#parentObject



171
172
173
# File 'lib/log4jruby/logger.rb', line 171

def parent
  fetch_logger(log4j_logger.parent)
end

#silence(temporary_level = ::Logger::ERROR) ⇒ Object

Compatibility with ActiveSupport::Logger needed to use a Log4jruby::Logger as an ActiveRecord::Base.logger



177
178
179
180
181
182
183
184
# File 'lib/log4jruby/logger.rb', line 177

def silence(temporary_level = ::Logger::ERROR)
  begin
    old_logger_level, self.level = level, temporary_level
    yield self
  ensure
    self.level = old_logger_level
  end
end

#tracing?Boolean

Returns:

  • (Boolean)


149
150
151
152
153
154
155
156
157
158
# File 'lib/log4jruby/logger.rb', line 149

def tracing?
  return @cached_tracing if defined?(@cached_tracing)
  @cached_tracing = begin
    if tracing.nil? && self != Logger.root
      parent.tracing?
    else
      tracing == true
    end
  end
end

#warn(object = nil, &block) ⇒ Object



110
111
112
113
114
# File 'lib/log4jruby/logger.rb', line 110

def warn(object = nil, &block)
  if warn?
    send_to_log4j(:warn, object, nil, &block)
  end
end

#warn?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/log4jruby/logger.rb', line 145

def warn?
  @logger.isEnabledFor(Java::org.apache.log4j.Priority::WARN)
end