Class: Brut::CLI::Logger

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/brut/cli/logger.rb

Instance Method Summary collapse

Constructor Details

#initialize(app_name:, stdout:, stderr:, theme: nil) ⇒ Logger

Returns a new instance of Logger.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/brut/cli/logger.rb', line 7

def initialize(app_name:, stdout:, stderr:, theme: nil)
  @app_name = app_name
  @stdout   = stdout
  @logger   = ::Logger.new("/dev/null")

  super(@logger)

  @simple_formatter =  ->(severity, _time, progname, msg) {
    formatted_severity = if theme
                             case severity
                             when "DEBUG"
                               theme.weak.render("DEBUG")
                             when "INFO"
                               theme.header.render("INFO")
                             when "WARN"
                               theme.warning.render("WARN")
                             when "ERROR"
                               theme.error.render("ERROR")
                             when "FATAL"
                               theme.error.render("FATAL")
                             else
                               severity
                             end
                         else
                           severity
                         end
    [
      theme ? theme.weak.render("[ #{progname} ]") : "[ #{progname} ]",
      "{#{formatted_severity}}",
      msg,
    ].join(" ") + "\n"
  }
  @file_formatter =  ->(severity, time, progname, msg) {
    "#{time} - [ #{progname} ]{#{severity}} #{msg}\n"
  }

  @stdout_logger = ::Logger.new("/dev/null")
  @stderr_logger = if stderr.nil? 
                     ::Logger.new("/dev/null")
                   else
                     ::Logger.new(stderr, progname: @app_name, formatter: @simple_formatter)
                   end

  @log_file = nil
end

Instance Method Details

#add(severity, message = nil, progname = nil, &block) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/brut/cli/logger.rb', line 110

def add(severity, message=nil, progname=nil, &block)
  @logger.add(severity, message, progname, &block)
  @stdout_logger.add(severity, message, progname, &block)
  if severity >= ::Logger::WARN
    @stderr_logger.add(severity, message, progname, &block)
  end
end

#debug(message = nil, &block) ⇒ Object



86
87
88
89
# File 'lib/brut/cli/logger.rb', line 86

def debug(message=nil,&block)
  @logger.debug(message,&block)
  @stdout_logger.debug(message,&block)
end

#error(message = nil, &block) ⇒ Object



99
100
101
102
103
# File 'lib/brut/cli/logger.rb', line 99

def error(message=nil,&block)
  @logger.error(message,&block)
  @stdout_logger.error(message,&block)
  @stderr_logger.error(message,&block)
end

#fatal(message = nil, &block) ⇒ Object



104
105
106
107
108
# File 'lib/brut/cli/logger.rb', line 104

def fatal(message=nil,&block)
  @logger.fatal(message,&block)
  @stdout_logger.fatal(message,&block)
  @stderr_logger.fatal(message,&block)
end

#info(message = nil, &block) ⇒ Object



90
91
92
93
# File 'lib/brut/cli/logger.rb', line 90

def info(message=nil,&block)
  @logger.info(message,&block)
  @stdout_logger.info(message,&block)
end

#level=(level) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/brut/cli/logger.rb', line 53

def level=(level)
  if level
    @logger.level = level
    @stdout_logger.level = level
    @stderr_logger.level = level
  end
end

#log_file=(log_file) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/brut/cli/logger.rb', line 61

def log_file=(log_file)
  if log_file
    @log_file = Pathname(log_file)
    log_dir = @log_file.dirname
    if !log_dir.exist?
      FileUtils.mkdir_p(log_dir)
    end
    @logger = ::Logger.new(@log_file, formatter: @file_formatter, progname: @app_name, level: @logger.level)
    __setobj__(@logger)
    if @logger.level == ::Logger::DEBUG
      @stdout.puts "Logging to file #{@log_file}"
    end
  else
    @log_file = nil
  end
end

#log_to_stdout=(log_to_stdout) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/brut/cli/logger.rb', line 78

def log_to_stdout=(log_to_stdout)
  @log_to_stdout = log_to_stdout
  if @log_to_stdout
    @stdout_logger = ::Logger.new(@stdout, formatter: @simple_formatter, progname: @app_name, level: @logger.level)
  else
    @stdout_logger = ::Logger.new("/dev/null")
  end
end

#warn(message = nil, &block) ⇒ Object



94
95
96
97
98
# File 'lib/brut/cli/logger.rb', line 94

def warn(message=nil,&block)
  @logger.warn(message,&block)
  @stdout_logger.warn(message,&block)
  @stderr_logger.warn(message,&block)
end

#without_stderrObject



118
119
120
121
122
123
124
# File 'lib/brut/cli/logger.rb', line 118

def without_stderr
  logger = self.class.new(app_name: @app_name, stdout: @stdout, stderr: nil)
  logger.level = @logger.level
  logger.log_file = @log_file
  logger.log_to_stdout = @log_to_stdout
  logger
end