- log warnings if logger methods are called outside of the current log

level.

  Enable it with PROFILE_BAD_LOG_CALLS=1 in env.

  Supporting research here:
  https://github.com/jordansissel/experiments/tree/master/ruby/logger-string-vs-block
This commit is contained in:
Jordan Sissel 2012-12-20 16:18:38 -08:00
parent a169739c7d
commit 6d6a328ca0

View file

@ -16,6 +16,41 @@ require "logstash/namespace"
require "logstash/program"
require "logstash/util"
if ENV["PROFILE_BAD_LOG_CALLS"]
# Set PROFILE_BAD_LOG_CALLS=1 in your environment if you want
# to track down logger calls that cause performance problems
#
# Related research here:
# https://github.com/jordansissel/experiments/tree/master/ruby/logger-string-vs-block
#
# Basically, the following is wastes tons of effort creating objects that are
# never used if the log level hides the log:
#
# logger.debug("something happend", :what => Happened)
#
# This is shown to be 4x faster:
#
# logger.debug(...) if logger.debug?
#
# I originally intended to use RubyParser and SexpProcessor to
# process all the logstash ruby code offline, but it was much
# faster to write this monkeypatch to warn as things are called.
require "cabin/mixins/logger"
module Cabin::Mixins::Logger
LEVELS.keys.each do |level|
m = "original_#{level}".to_sym
predicate = "#{level}?".to_sym
alias_method m, level
define_method(level) do |*args|
if !send(predicate)
warn("Unconditional log call", :location => caller[0])
end
send(m, *args)
end
end
end
end
class LogStash::Runner
include LogStash::Program