class ReeLogger::Config
def build
def build is_rollbar_enabled = parse_bool_string(ENV['LOG_ROLLBAR_ENABLED']) to_obj({ file_path: ENV['LOG_FILE_PATH'], file_auto_flush: parse_bool_string(ENV['LOG_FILE_AUTO_FLUSH']), levels: { file: parse_level(ENV['LOG_LEVEL_FILE']), stdout: parse_level(ENV['LOG_LEVEL_STDOUT']), rollbar: is_rollbar_enabled ? parse_level(ENV['LOG_LEVEL_ROLLBAR']) : nil, }, rollbar: { enabled: is_rollbar_enabled, access_token: is_rollbar_enabled ? ENV.fetch('LOG_ROLLBAR_ACCESS_TOKEN') : nil, environment: is_rollbar_enabled ? ENV.fetch('LOG_ROLLBAR_ENVIRONMENT') : nil, branch: ENV['LOG_ROLLBAR_BRANCH'], host: ENV['LOG_ROLLBAR_HOST'] }, rate_limit: { interval: get_int_value('LOG_RATE_LIMIT_INTERVAL', RATE_LIMIT_INTERVAL), max_count: get_int_value('LOG_RATE_LIMIT_MAX_COUNT', RATE_LIMIT_MAX_COUNT), }, default_filter_words: %w[ password token credential bearer authorization ] }) end
def get_int_value(name, default)
def get_int_value(name, default) value = ENV[name] v = if value.to_s.strip.empty? default else Integer(value) end if v < 0 raise ArgumentError, "ENV['#{name}'] should be > 0" end v end
def parse_bool_string(bool)
def parse_bool_string(bool) return false if is_blank(bool) return bool.to_s.downcase == "true" end
def parse_level(level)
def parse_level(level) return if is_blank(level) validate_inclusion(level, LEVELS) level.to_sym end