Module: OllamaChat::Logging

Included in:
Chat
Defined in:
lib/ollama_chat/logging.rb

Overview

Provides a simple logging facility for the OllamaChat application. It offers methods to access a logger, determine the current log level, and write messages at various severity levels, including debug.

Instance Method Summary collapse

Instance Method Details

#log(severity, msg, data: nil, warn: false) ⇒ Object

The log method records a message or exception at the specified severity level using the logger and optionally triggers a warning output

Parameters:

  • severity (Symbol)

    the logging level to use

  • msg (String, Exception)

    the message or exception to be logged

  • warn (TrueClass, FalseClass) (defaults to: false)

    whether to also trigger a warning output



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ollama_chat/logging.rb', line 30

def log(severity, msg, data: nil, warn: false)
  payload = {
    msg:   ,
    data:  data || {}
  }.symbolize_keys_recursive

  if msg.is_a?(Exception)
    if backtrace = msg.ask_and_send(:backtrace)
      payload[:data][:backtrace] = backtrace
    end
    payload[:msg] = msg = "#{msg.class}: #{msg.message}"
  else
    payload[:msg] = msg = msg.to_s
  end

  # Sanitize payload for safe JSON serialization: break circular references
  # and coerce non-serializable objects to strings while preserving
  # primitives/hashes/arrays
  payload = payload.deep_transform(
    circular: ?…,
    value: -> node {
      keep = [
        responding?(:to_hash), responding?(:to_ary), responding?(:to_int),
        true, false, nil,
      ]
      case node
      when *keep
        node
      else
        node.to_s
      end
    }
  )

  logger.send(severity, payload)
  warn and self.warn(msg)
  nil
end

#loggerLogger

The logger method returns the current Logger instance used by OllamaChat. If no Logger exists, it creates one pointing to the configured log file.

Returns:

  • (Logger)

    the active Logger instance



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/ollama_chat/logging.rb', line 9

def logger
  @logger ||= begin
    OC::OLLAMA::CHAT::LOGFILE.dirname.mkpath
    l = Logger.new(OC::OLLAMA::CHAT::LOGFILE)
    l.formatter = -> (severity, time, _progname, msg) do
      msg = msg.stringify_keys_recursive
      msg['level']    = severity
      msg['time']     = time.iso8601(0)
      msg['progname'] = progname
      msg.to_json + "\n"
    end
    l
  end
end