File: log.rb

package info (click to toggle)
ruby-html-proofer 3.19.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,040 kB
  • sloc: ruby: 3,203; sh: 9; makefile: 4; javascript: 1; php: 1
file content (55 lines) | stat: -rw-r--r-- 1,306 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
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
52
53
54
55
# frozen_string_literal: true

require 'yell'
require 'rainbow'

module HTMLProofer
  class Log
    include Yell::Loggable

    STDOUT_LEVELS = %i[debug info warn].freeze
    STDERR_LEVELS = %i[error fatal].freeze

    def initialize(log_level)
      @logger = Yell.new(format: false, \
                         name: 'HTMLProofer', \
                         level: "gte.#{log_level}") do |l|
        l.adapter :stdout, level: 'lte.warn'
        l.adapter :stderr, level: 'gte.error'
      end
    end

    def log(level, message)
      log_with_color(level, message)
    end

    def log_with_color(level, message)
      @logger.send level, colorize(level, message)
    end

    def colorize(level, message)
      color = case level
              when :debug
                :cyan
              when :info
                :blue
              when :warn
                :yellow
              when :error, :fatal
                :red
              end

      if (STDOUT_LEVELS.include?(level) && $stdout.isatty) || \
         (STDERR_LEVELS.include?(level) && $stderr.isatty)
        Rainbow(message).send(color)
      else
        message
      end
    end

    # dumb override to play nice with Typhoeus/Ethon
    def debug(message = nil)
      log(:debug, message) unless message.nil?
    end
  end
end