Browse Source

colorized logs

main
pvincent 1 year ago
parent
commit
d40c857313
  1. 18
      app/controllers/welcome_controller.rb
  2. 17
      config/application.rb
  3. 65
      lib/formatters/basic_formatter.rb

18
app/controllers/welcome_controller.rb

@ -1,4 +1,22 @@
class WelcomeController < ApplicationController class WelcomeController < ApplicationController
def index def index
logger.measure_error "Took too long to complete", min_duration: 3000 do
logger.debug("Debugging information to aid with problem determination")
logger.info("Informational message such as request received\nline 2\nline3")
logger.warn("Warn about something in the system")
logger.error("An error occurred during processing")
logger.fatal("Oh no something really bad happened")
logger.measure_info "Called external interface" do
sleep 0.1 # Code to call external service ...
end
SemanticLogger.tagged(user: "Jack", zip_code: 12345) do
# All log entries in this block will include the above named tags
logger.debug("Hello World")
end
# raise "exception"
end
end end
end end

17
config/application.rb

@ -10,19 +10,12 @@ class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version. # Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0 config.load_defaults 7.0
# Efficient logging with Semantic Logger
require_relative "../lib/formatters/basic_formatter"
config.semantic_logger.add_appender(io: $stdout, formatter: BasicFormatter.new)
config.rails_semantic_logger.add_file_appender = false
config.rails_semantic_logger.semantic = false config.rails_semantic_logger.semantic = false
config.rails_semantic_logger.started = false
config.rails_semantic_logger.started = true
config.rails_semantic_logger.processing = true config.rails_semantic_logger.processing = true
config.rails_semantic_logger.rendered = true config.rails_semantic_logger.rendered = true
config.semantic_logger.backtrace_level = :info
config.rails_semantic_logger.ap_options = { multiline: true }
config.colorize_logging = false
config.rails_semantic_logger.console_logger = false
$stdout.sync = true
config.rails_semantic_logger.add_file_appender = false
require_relative "../lib/formatters/basic_formatter"
config.semantic_logger.add_appender(io: $stdout, formatter: BasicFormatter.new)
end end

65
lib/formatters/basic_formatter.rb

@ -1,15 +1,64 @@
# My Custom colorized formatter # My Custom colorized formatter
class BasicFormatter < SemanticLogger::Formatters::Color class BasicFormatter < SemanticLogger::Formatters::Color
ANSI_REVERSED_ERROR = "\e[1m\e[7m\e[91m".freeze
ANSI_REVERSED_WARNING = "\e[0;30;43m".freeze
ANSI_REVERSED_ERROR = "\e[1;30;41m".freeze
ANSI_GRAY = "\e[90m".freeze
# Return the complete log level name in uppercase # Return the complete log level name in uppercase
def initialize def initialize
# super(ap: { multiline: true },
# time_format: "%H:%M:%S",
# color_map: {
# info: SemanticLogger::AnsiColors::RED,
# warn: SemanticLogger::AnsiColors::YELLOW,
# })
super(time_format: "%H:%M:%S", color_map: ColorMap.new(info: SemanticLogger::AnsiColors::RED, warn: SemanticLogger::AnsiColors::YELLOW))
super(time_format: "%H:%M:%S",
color_map: ColorMap.new(
debug: ANSI_GRAY,
info: SemanticLogger::AnsiColors::GREEN,
warn: SemanticLogger::AnsiColors::YELLOW,
))
end
def time
"#{color}#{format_time(log.time)}#{color_map.clear}" if time_format
end
def message
return unless log.message
prefix = "#{color}--#{color_map.clear}"
case log.level
when :info
message = if log.name == "Rails" && log.message.starts_with?("Started")
log.message.split("for")[0]
else
log.message
end
"#{prefix} #{SemanticLogger::AnsiColors::WHITE}#{message}#{color_map.clear}"
when :warn
"#{prefix} #{ANSI_REVERSED_WARNING}#{log.message}#{color_map.clear}"
when :error, :fatal
"#{prefix} #{ANSI_REVERSED_ERROR}#{log.message}#{color_map.clear}"
else
"#{prefix} #{color}#{log.message}#{color_map.clear}"
end
end
def tags; end
def process_info
fname = file_name_and_line
"#{color}[#{fname}]#{color_map.clear}" if fname
end
def exception
return unless log.exception
root_path = Rails.root.to_s
backtrace = log.exception.backtrace.select do |line|
line.starts_with?(root_path)
end
if backtrace.count.positive?
"-- #{ANSI_REVERSED_ERROR}#{log.exception.class}#{color_map.clear} #{color}#{log.exception.message}#{color_map.clear}#{SemanticLogger::AnsiColors::WHITE}\n\t#{backtrace.join("\n\t")}#{color_map.clear}\n\n"
else
"-- #{ANSI_REVERSED_ERROR}#{log.exception.class}: #{log.exception.message}#{color_map.clear}\n\n"
end
end end
end end
Loading…
Cancel
Save