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
-
#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.
-
#logger ⇒ Logger
The logger method returns the current Logger instance used by OllamaChat.
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
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.}" 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 |
#logger ⇒ Logger
The logger method returns the current Logger instance used by OllamaChat. If no Logger exists, it creates one pointing to the configured log file.
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 |