Class: Kotoshu::Debug::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/kotoshu/debug_logger.rb

Overview

Debug logger for detailed spellchecking information.

Provides structured logging for lookup operations, suggestion generation, cache behavior, and decision trees.

Constant Summary collapse

LEVELS =

Log levels

%i[info verbose trace].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output: $stderr, level: :info) ⇒ Logger

Create a new debug logger.

Parameters:

  • output (IO) (defaults to: $stderr)

    Output stream (default: $stderr)

  • level (Symbol) (defaults to: :info)

    Log level (:info, :verbose, :trace)



19
20
21
22
23
# File 'lib/kotoshu/debug_logger.rb', line 19

def initialize(output: $stderr, level: :info)
  @output = output
  @level = level
  @indent = 0
end

Instance Attribute Details

#levelObject (readonly)

Returns the value of attribute level.



13
14
15
# File 'lib/kotoshu/debug_logger.rb', line 13

def level
  @level
end

#outputObject (readonly)

Returns the value of attribute output.



13
14
15
# File 'lib/kotoshu/debug_logger.rb', line 13

def output
  @output
end

Instance Method Details

#debug_cache(cache_type, key, hit:) ⇒ Object

Log cache operation.

Parameters:

  • cache_type (String)

    Type of cache

  • key (String)

    The cache key

  • hit (Boolean)

    True if cache hit



64
65
66
67
68
69
# File 'lib/kotoshu/debug_logger.rb', line 64

def debug_cache(cache_type, key, hit:)
  return unless should_log?(:trace)

  status = hit ? "HIT" : "MISS"
  output.puts "DEBUG: cache #{cache_type.upcase} #{status} \"#{key}\""
end

#debug_decision_tree(word, decisions:) ⇒ Object

Log decision tree.

Parameters:

  • word (String)

    The input word

  • decisions (Array)

    Array of decision nodes



75
76
77
78
79
80
81
82
# File 'lib/kotoshu/debug_logger.rb', line 75

def debug_decision_tree(word, decisions:)
  return unless should_log?(:trace)

  output.puts "DEBUG: decision tree for \"#{word}\""
  @indent += 2
  print_decisions(decisions)
  @indent -= 2
end

#debug_lookup(word, result:, time:) ⇒ Object

Log lookup operation.

Parameters:

  • word (String)

    The word being looked up

  • result (Boolean)

    The lookup result

  • time (Float)

    Time taken in milliseconds



30
31
32
33
34
35
# File 'lib/kotoshu/debug_logger.rb', line 30

def debug_lookup(word, result:, time:)
  return unless should_log?(:info)

  status = result ? "" : ""
  output.puts "DEBUG: lookup #{status} \"#{word}\" - #{time.round(3)}ms"
end

#debug_suggestions(word, suggestions:, time:) ⇒ Object

Log suggestion generation.

Parameters:

  • word (String)

    The input word

  • suggestions (Array)

    Generated suggestions

  • time (Float)

    Time taken in milliseconds



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/kotoshu/debug_logger.rb', line 42

def debug_suggestions(word, suggestions:, time:)
  return unless should_log?(:verbose)

  output.puts "DEBUG: suggestions for \"#{word}\" (#{time.round(3)}ms)"

  return unless should_log?(:trace)

  @indent += 2
  suggestions.each do |suggestion|
    dist = suggestion.distance
    conf = suggestion.confidence
    source = suggestion.source
    output.puts "#{" " * @indent}#{suggestion.word} (dist: #{dist}, conf: #{conf.round(2)}, src: #{source})"
  end
  @indent -= 2
end

#info(message) ⇒ Object

Log info message.

Parameters:

  • message (String)

    The message



87
88
89
90
91
# File 'lib/kotoshu/debug_logger.rb', line 87

def info(message)
  return unless should_log?(:info)

  output.puts "DEBUG: #{message}"
end

#trace(message) ⇒ Object

Log trace message.

Parameters:

  • message (String)

    The message



105
106
107
108
109
# File 'lib/kotoshu/debug_logger.rb', line 105

def trace(message)
  return unless should_log?(:trace)

  output.puts "DEBUG: #{message}"
end

#verbose(message) ⇒ Object

Log verbose message.

Parameters:

  • message (String)

    The message



96
97
98
99
100
# File 'lib/kotoshu/debug_logger.rb', line 96

def verbose(message)
  return unless should_log?(:verbose)

  output.puts "DEBUG: #{message}"
end