Sha256: 7bc22543844c75a3cba7e9b553dc60a499d69b8bd72b853e76c5c76f74f851d0

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

module SlackWebhookLogger
  class Formatter < ::Logger::Formatter
    attr_writer :format

    def format
      @format ||= proc { |severity, time, _progname, msg|
        heading = case severity
                  when 'FATAL'
                    "📛 *#{severity}*"
                  when 'ERROR'
                    "🛑 *#{severity}*"
                  when 'WARN'
                    "⚠ī¸ *#{severity}*"
                  when 'INFO'
                    "ℹī¸ *#{severity}*"
                  when 'DEBUG'
                    "🐛 *#{severity}*"
                  else
                    'đŸĒĩ *Logger*'
                  end

        title = "#{heading} (#{time})"

        text = <<~MSG
          #{msg2str(msg)}
        MSG

        {
          text: [title, text].join("\n").to_s,
          blocks: [
            {
              type: 'section',
              text: {
                type: 'mrkdwn',
                text: title
              }
            },
            {
              type: 'divider'
            },
            {
              type: 'section',
              text: {
                "type": 'plain_text',
                "text": text
              }
            }
          ]
        }
      }
    end

    def call(severity, time, progname, msg)
      format.call(severity, time, progname, msg)
    end

    private def msg2str(msg)
      case msg
      when ::String
        msg
      when ::Exception
        "#{msg.message} (#{msg.class})\n" <<
        (msg.backtrace || []).join("\n")
      else
        msg.inspect
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slack_webhook_logger-0.1.0 lib/slack_webhook_logger/formatter.rb