Sha256: 510cc1f342ed62236a2b15c477278b44b804439ce8ccd29d600cd30ce9124291

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

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

    def format
      @format ||= proc do |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}) [#{ENV.fetch('RAILS_ENV', nil)}]"

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

        slackify(title, text)
      end
    end

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

    def slackify(title, text)
      {
        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

    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.4.0 lib/slack_webhook_logger/formatter.rb