Module: Trinidad::Logging

Defined in:
lib/trinidad/logging.rb

Defined Under Namespace

Classes: DefaultFormatter, FileHandler, MessageFormatter

Constant Summary collapse

JUL =
Java::JavaUtilLogging
LogFactory =
Java::OrgApacheJuliLogging::LogFactory
@@configured =
nil

Class Method Summary collapse

Class Method Details

.configure(log_level = nil) ⇒ Object

Configure the “global” Trinidad logging.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/trinidad/logging.rb', line 13

def self.configure(log_level = nil)
  return false if @@configured
  
  root_logger = JUL::Logger.getLogger('')
  level = parse_log_level(log_level, :INFO)

  out_handler  = JUL::ConsoleHandler.new
  out_handler.setOutputStream JRuby.runtime.out
  out_handler.formatter = console_formatter

  err_handler  = JUL::ConsoleHandler.new
  err_handler.setOutputStream JRuby.runtime.err
  err_handler.formatter = console_formatter
  err_handler.level = level.intValue > JUL::Level::WARNING.intValue ?
    level : JUL::Level::WARNING # only >= WARNING on STDERR
  
  root_logger.synchronized do
    root_logger.handlers.to_a.each do |handler|
      root_logger.remove_handler(handler) if handler.is_a?(JUL::ConsoleHandler)
    end

    root_logger.add_handler(out_handler)
    root_logger.add_handler(err_handler)
    root_logger.level = level
  end
  adjust_tomcat_loggers
  
  @@configured = true
  root_logger
end

.configure!(log_level = nil) ⇒ Object

Force logging (re-)configuration.

See Also:

  • #configure


46
47
48
49
# File 'lib/trinidad/logging.rb', line 46

def self.configure!(log_level = nil)
  @@configured = false
  configure(log_level)
end

.configure_web_app(web_app, context) ⇒ Object

Configure logging for a web application.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/trinidad/logging.rb', line 52

def self.configure_web_app(web_app, context)
  param_name, param_value = 'jruby.rack.logging', 'JUL'
  # 1. delegate (jruby-rack) servlet log to JUL
  if set_value = web_app_context_param(web_app, context, param_name)
    return nil if set_value.upcase != param_value
  else
    context.add_parameter(param_name, param_value)
  end
  # 2. use Tomcat's JUL logger name (unless set) :
  param_name = 'jruby.rack.logging.name'
  unless logger_name = web_app_context_param(web_app, context, param_name)
    # for a context path e.g. '/foo' most likely smt of the following :
    # org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/foo]
    context.add_parameter(param_name, logger_name = context.send(:logName))
  end
  configure # make sure 'global' logging if configured
  
  logger = JUL::Logger.getLogger(logger_name) # exclusive for web app
  # avoid duplicate calls - do not configure our FileHandler twice :
  return false if logger.handlers.find { |h| h.is_a?(FileHandler) }
  level = parse_log_level(web_app.log, nil)
  logger.level = level # inherits level from parent if nil
  # delegate to root (console) output only in development mode :
  logger.use_parent_handlers = ( web_app.environment == 'development' )
  
  prefix, suffix = web_app.environment, '.log' # {prefix}{date}{suffix}
  file_handler = FileHandler.new(web_app.log_dir, prefix, suffix)
  file_handler.rotatable = true # {prefix}{date}{suffix}
  file_handler.formatter = web_app_formatter
  logger.add_handler(file_handler)
  logger
end