mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 06:37:19 -04:00
- 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:
parent
a169739c7d
commit
6d6a328ca0
1 changed files with 35 additions and 0 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue