Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion klogger-logger.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -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
61 changes: 17 additions & 44 deletions lib/klogger/json_highlighter.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down