Class: Logtail::Config

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/logtail/config.rb,
lib/logtail/config/integrations.rb

Overview

Singleton class for reading and setting Logtail configuration.

For Rails apps, this is installed into ‘config.logtail`. See examples below.

Examples:

Rails example

config.logtail. = false

Everything else

config = Logtail::Config.instance
config.append_metdata = false

Defined Under Namespace

Modules: Integrations Classes: NoLoggerError, SimpleLogFormatter

Constant Summary collapse

DEVELOPMENT_NAME =
"development".freeze
PRODUCTION_NAME =
"production".freeze
STAGING_NAME =
"staging".freeze
TEST_NAME =
"test".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#http_body_limit=(value) ⇒ Object (writeonly)

Sets the attribute http_body_limit

Parameters:

  • value

    the value to set the attribute http_body_limit to.



33
34
35
# File 'lib/logtail/config.rb', line 33

def http_body_limit=(value)
  @http_body_limit = value
end

Instance Method Details

#debug(&block) ⇒ Object

Convenience method for logging debug statements to the debug logger set in this class.



60
61
62
63
64
65
66
67
# File 'lib/logtail/config.rb', line 60

def debug(&block)
  debug_logger = Config.instance.debug_logger
  if debug_logger
    message = yield
    debug_logger.debug(message)
  end
  true
end

#debug_loggerObject

Accessor method for #debug_logger=.



84
85
86
# File 'lib/logtail/config.rb', line 84

def debug_logger
  @debug_logger
end

#debug_logger=(value) ⇒ Object

This is useful for debugging. This Sets a debug_logger to view internal Logtail library log messages. The default is ‘nil`. Meaning log to nothing.

See #debug_to_file! and #debug_to_stdout! for convenience methods that handle creating and setting the logger.

Examples:

Rails

config.logtail.debug_logger = ::Logger.new(STDOUT)

Everything else

Logtail::Config.instance.debug_logger = ::Logger.new(STDOUT)


79
80
81
# File 'lib/logtail/config.rb', line 79

def debug_logger=(value)
  @debug_logger = value
end

#debug_to_file!(file_path) ⇒ Object

A convenience method for writing internal Logtail debug messages to a file.

Examples:

Rails

config.Logtail.debug_to_file!("#{Rails.root}/log/logtail.log")

Everything else

Logtail::Config.instance.debug_to_file!("log/logtail.log")


94
95
96
97
98
99
100
# File 'lib/logtail/config.rb', line 94

def debug_to_file!(file_path)
  FileUtils.mkdir_p( File.dirname(file_path) )
  file = File.open(file_path, "ab")
  file_logger = ::Logger.new(file)
  file_logger.formatter = SimpleLogFormatter.new
  self.debug_logger = file_logger
end

#debug_to_stdout!Object

A convenience method for writing internal Logtail debug messages to STDOUT.

Examples:

Rails

config.logtail.debug_to_stdout!

Everything else

Logtail::Config.instance.debug_to_stdout!


108
109
110
111
112
# File 'lib/logtail/config.rb', line 108

def debug_to_stdout!
  stdout_logger = ::Logger.new(STDOUT)
  stdout_logger.formatter = SimpleLogFormatter.new
  self.debug_logger = stdout_logger
end

#development?Boolean

Returns:

  • (Boolean)


157
158
159
# File 'lib/logtail/config.rb', line 157

def development?
  environment == DEVELOPMENT_NAME
end

#environmentObject

Accessor method for #environment=



125
126
127
# File 'lib/logtail/config.rb', line 125

def environment
  @environment ||= ENV["RACK_ENV"] || ENV["RAILS_ENV"] || "development"
end

#environment=(value) ⇒ Object

The environment your app is running in. Defaults to ‘RACK_ENV` and `RAILS_ENV`. It should be rare that you have to set this. If the aforementioned env vars are not set please do.

Examples:

If you do not set ‘RACK_ENV` or `RAILS_ENV`

Logtail::Config.instance.environment = "staging"


120
121
122
# File 'lib/logtail/config.rb', line 120

def environment=(value)
  @environment = value
end

#filter_sent_to_better_stack(&block) ⇒ Object

This allows filtering logs that are sent to Better Stack. Can be called multiple times, all filters will be applied. If the passed block RETURNS TRUE for a particular LogEntry, it WILL NOT BE SENT to Better Stack.

See LogEntry for available attributes of the block parameter.

Examples:

Rails

config.logtail.filter_sent_to_better_stack { |log_entry| log_entry.context_snapshot[:http][:path].start_with?('/_') }

Everything else

Logtail.config.filter_sent_to_better_stack { |log_entry| log_entry.message.include?('IGNORE') }


52
53
54
55
# File 'lib/logtail/config.rb', line 52

def filter_sent_to_better_stack(&block)
  @better_stack_filters ||= []
  @better_stack_filters << -> (log_entry) { yield(log_entry) }
end

#integrationsObject

Convenience method for accessing the various ‘Logtail::Integrations::*` class settings. These provides settings for enabling, disabled, and silencing integrations. See Integrations for a full list of available methods.



132
133
134
# File 'lib/logtail/config.rb', line 132

def integrations
  Integrations
end

#loggerObject

Accessor method for #logger=.



148
149
150
151
152
153
154
# File 'lib/logtail/config.rb', line 148

def logger
  if @logger.is_a?(Proc)
    @logger.call()
  else
    @logger ||= Logger.new(STDOUT)
  end
end

#logger=(value) ⇒ Object

This is the main logger Logtail writes to. All of the Logtail integrations write to this logger instance. It should be set to your global logger. For Rails, this is set automatically to ‘Rails.logger`, you should not have to set this.

Examples:

Non-rails frameworks

my_global_logger = Logtail::Logger.new(STDOUT)
Logtail::Config.instance.logger = my_global_logger


143
144
145
# File 'lib/logtail/config.rb', line 143

def logger=(value)
  @logger = value
end

#production?Boolean

Returns:

  • (Boolean)


167
168
169
# File 'lib/logtail/config.rb', line 167

def production?
  environment == PRODUCTION_NAME
end

#send_to_better_stack?(log_entry) ⇒ Boolean

Whether a particular LogEntry should be sent to Better Stack

Returns:

  • (Boolean)


36
37
38
39
40
41
# File 'lib/logtail/config.rb', line 36

def send_to_better_stack?(log_entry)
  !@better_stack_filters&.any? { |blocker| blocker.call(log_entry) }
rescue => e
  debug { "Could not determine whether to send LogEntry to Better Stack (assumed yes): #{e}" }
  true
end

#staging?Boolean

Returns:

  • (Boolean)


172
173
174
# File 'lib/logtail/config.rb', line 172

def staging?
  environment == STAGING_NAME
end

#test?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/logtail/config.rb', line 162

def test?
  environment == TEST_NAME
end