diff --git a/klogger-logger.gemspec b/klogger-logger.gemspec index 44e5cb9..487ff89 100644 --- a/klogger-logger.gemspec +++ b/klogger-logger.gemspec @@ -16,8 +16,8 @@ Gem::Specification.new do |s| s.authors = ['Adam Cooke'] s.email = ['adam@krystal.uk'] s.licenses = ['MIT'] + s.add_dependency('coderay', '~> 1.1') s.add_dependency('concurrent-ruby', '>= 1.0', '< 2.0') s.add_dependency('json') - s.add_dependency('rouge', '>= 3.30', '< 5.0') end # rubocop:enable Gemspec/RequireMFA diff --git a/lib/klogger/json_highlighter.rb b/lib/klogger/json_highlighter.rb index ef26913..668bc02 100644 --- a/lib/klogger/json_highlighter.rb +++ b/lib/klogger/json_highlighter.rb @@ -1,58 +1,31 @@ # frozen_string_literal: true -require 'rouge' +require 'coderay' +require 'klogger/colors' # This class is responsible for receiving log data and sending it to an underlying module Klogger class JSONHighlighter - class Theme < Rouge::CSSTheme - - style Text, fg: '#ffffff' - style Literal::String, - Literal::Number, fg: '#35AEFF' - style Punctuation, fg: '#888888' - - end - - class ErrorTheme < Theme - - style Literal::String, - Literal::Number, fg: '#FF355D' - - end - - class WarnTheme < Theme - - style Literal::String, - Literal::Number, fg: '#FFD700' - - end - - class DebugTheme < Theme - - style Text, fg: '#999999' - style Literal::String, - Literal::Number, fg: '#cccccc' - - end - - LEXER = Rouge::Lexers::JSON.new - FORMATTER = Rouge::Formatters::Terminal256 - FORMATTERS = { - info: FORMATTER.new(Theme.new), - debug: FORMATTER.new(DebugTheme.new), - warn: FORMATTER.new(WarnTheme.new), - error: FORMATTER.new(ErrorTheme.new), - fatal: FORMATTER.new(ErrorTheme.new) - }.freeze - class << self def highlight(output) severity = ::Regexp.last_match(1).to_sym if output.match(/"severity":"(\w+)"/) - formatter = FORMATTERS[severity] || FORMATTERS[:info] - formatter.format(LEXER.lex(output)) + + # Determine the color based on severity + case severity + when :info + color = :info + when :warn + color = :warn + when :error, :fatal + color = :error + else # default (debug, unknown, or no severity) + color = :white + end + + # Apply color to the entire JSON output + Colors.colorize(output, color) end end