Class: Soba::Services::SessionLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/soba/services/session_logger.rb

Overview

セッション出力のログ管理サービス

Constant Summary collapse

DEFAULT_LOG_DIR =
File.join(Dir.home, ".soba", "logs")
DEFAULT_MAX_SIZE =

10MB

10 * 1024 * 1024

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(log_dir: nil, max_size: DEFAULT_MAX_SIZE) ⇒ SessionLogger

Returns a new instance of SessionLogger.



15
16
17
18
19
20
21
# File 'lib/soba/services/session_logger.rb', line 15

def initialize(log_dir: nil, max_size: DEFAULT_MAX_SIZE)
  @log_dir = log_dir || DEFAULT_LOG_DIR
  @max_size = max_size
  @file_handles = {}

  ensure_log_directory
end

Instance Attribute Details

#log_dirObject (readonly)

Returns the value of attribute log_dir.



13
14
15
# File 'lib/soba/services/session_logger.rb', line 13

def log_dir
  @log_dir
end

Instance Method Details

#cleanup_old_logs(days: 30) ⇒ Object

古いログファイルのクリーンアップ



56
57
58
59
60
61
62
63
64
# File 'lib/soba/services/session_logger.rb', line 56

def cleanup_old_logs(days: 30)
  cutoff_time = Time.now - (days * 24 * 60 * 60)

  Dir.glob(File.join(@log_dir, "soba-*.log*")).each do |file|
    if File.mtime(file) < cutoff_time
      File.delete(file)
    end
  end
end

#closeObject

ファイルハンドルをクローズ



50
51
52
53
# File 'lib/soba/services/session_logger.rb', line 50

def close
  @file_handles.each_value(&:close)
  @file_handles.clear
end

#find_log(session_name) ⇒ Object

セッションのログファイルパスを取得



36
37
38
39
# File 'lib/soba/services/session_logger.rb', line 36

def find_log(session_name)
  log_file = File.join(@log_dir, "#{session_name}.log")
  File.exist?(log_file) ? log_file : nil
end

#list_sessionsObject

ログが存在するセッション一覧



42
43
44
45
46
47
# File 'lib/soba/services/session_logger.rb', line 42

def list_sessions
  Dir.glob(File.join(@log_dir, "soba-*.log")).
    reject { |f| f.include?(".log.") }. # ローテートファイルを除外
    map { |f| File.basename(f, ".log") }.
    sort
end

#write(session_name, content) ⇒ Object

ログファイルに書き込み



24
25
26
27
28
29
30
31
32
33
# File 'lib/soba/services/session_logger.rb', line 24

def write(session_name, content)
  ensure_file_handle(session_name)

  timestamp = Time.now.strftime("[%Y-%m-%d %H:%M:%S]")
  @file_handles[session_name].write("#{timestamp} #{content}")
  @file_handles[session_name].flush

  # ローテーションチェック
  check_rotation(session_name)
end