Module: Log2Json
- Defined in:
- lib/log2json.rb,
lib/log2json/mlogbuffer.rb,
lib/log2json/railslogger.rb,
lib/log2json/filters/syslog.rb,
lib/log2json/filters/nginx_access.rb
Defined Under Namespace
Modules: Filters Classes: MultilineLogBuffer, Spitter
Constant Summary collapse
- LEVELS =
{ :debug => Logger::DEBUG, :info => Logger::INFO, :warn => Logger::WARN, :error => Logger::ERROR, :fatal => Logger::FATAL, :unknown => 5 }
Class Method Summary collapse
-
.create_custom_rails_logger(config) ⇒ Object
Create a custom logger that uses its own formatting for easier parsing by a log2json log monitoring script.
-
.create_custom_unicorn_logger(config) ⇒ Object
Simiar to the custom rails logger, but for unicorn.
- .log_formatter ⇒ Object
- .main(filters, opts = {}, &block) ⇒ Object
Class Method Details
.create_custom_rails_logger(config) ⇒ Object
Create a custom logger that uses its own formatting for easier parsing by a log2json log monitoring script.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/log2json/railslogger.rb', line 38 def self.create_custom_rails_logger(config) if config.respond_to?(:paths) # assume rails 3 path = config.paths["log"].first unless File.exist? File.dirname path FileUtils.mkdir_p File.dirname path end config.colorize_logging = false else # assume rails 2 path = config.log_path config.active_record.colorize_logging = false end logger = ::Logger.new(path) logger.level = LEVELS[config.log_level] logger.formatter = ::Log2Json::log_formatter if defined?(ActiveSupport::TaggedLogging) ActiveSupport::TaggedLogging.new(logger) else logger end end |
.create_custom_unicorn_logger(config) ⇒ Object
Simiar to the custom rails logger, but for unicorn.
61 62 63 64 65 66 |
# File 'lib/log2json/railslogger.rb', line 61 def self.create_custom_unicorn_logger(config) logger = ::Logger.new(config.set[:stderr_path]) logger.level = Logger::INFO logger.formatter = ::Log2Json::log_formatter logger end |
.log_formatter ⇒ Object
28 29 30 31 32 33 |
# File 'lib/log2json/railslogger.rb', line 28 def self.log_formatter proc do |severity, datetime, progname, msg| "#{datetime.strftime('%Y-%m-%dT%H:%M:%S%z')}: [#{severity}] #{$$} #{msg.gsub(/\n/, '#012')}\n" # Note: Following rsyslog's convention, all newlines are converted to '#012'. end end |
.main(filters, opts = {}, &block) ⇒ Object
8 9 10 11 12 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 |
# File 'lib/log2json.rb', line 8 def self.main(filters, opts={}, &block) output = opts[:output] || STDOUT spitter = opts[:spitter] if spitter.nil? # configure the spitter to take config overrides from ENV config = {} Spitter::CONFIG.keys.each do |name| key = name.to_s.downcase config[name] = ENV[key] if ENV.member?(key) end spitter = ::Log2Json::Spitter.new(STDIN, ENV['type'], config.merge(opts)) end if block.nil? block = proc do |rec| if not rec['@timestamp'].nil? output.write(rec.to_json() << "\n") output.flush() # NOTE: Ruby's built-in json module, by default, doesn't output any # literal newline characters while serializing. So using # newlines as json record separator is fine here. end end end spitter.each_record do |rec| filters[rec['@type']].each do |f| rec = f.filter(rec) break if rec.nil? end block.call(rec) unless rec.nil? end end |