module Neovim::Logging

Mixed into classes for unified logging helper methods.

@api private

Constants

TIMESTAMP_FORMAT

Public Class Methods

included(base) click to toggle source
# File lib/neovim/logging.rb, line 40
def self.included(base)
  base.send(:include, Helpers)
end
logger(env=ENV) click to toggle source

Return the value of @logger, or construct it from the environment. $NVIM_RUBY_LOG_FILE specifies a file to log to (default STDERR), while $NVIM_RUBY_LOG_LEVEL specifies the level (default WARN)

# File lib/neovim/logging.rb, line 13
def self.logger(env=ENV)
  return @logger if instance_variable_defined?(:@logger)

  env_file, env_level =
    env.values_at("NVIM_RUBY_LOG_FILE", "NVIM_RUBY_LOG_LEVEL")

  @logger = Logger.new(env_file || STDERR)

  if /\S+/.match?(env_level)
    begin
      @logger.level = Integer(env_level)
    rescue ArgumentError
      @logger.level = Logger.const_get(env_level.upcase)
    end
  else
    @logger.level = Logger::WARN
  end

  @logger.formatter = json_formatter
  @logger
end
logger=(logger) click to toggle source
# File lib/neovim/logging.rb, line 35
def self.logger=(logger)
  logger.formatter = json_formatter
  @logger = logger
end

Private Class Methods

json_formatter() click to toggle source
# File lib/neovim/logging.rb, line 44
def self.json_formatter
  lambda do |level, time, _, fields|
    require "multi_json"

    MultiJson.encode(
      {
        _level: level,
        _time: time.strftime(TIMESTAMP_FORMAT)
      }.merge!(fields)
    ) << "\n"
  end
end