No release in over 3 years
Low commit activity in last 3 years
Bullet log perser.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

bullet log parser

Gem Version

This parser can help to convert the Bullet logs to prefer format you want.

Install

bundle add bullet_log_parser --group "development, test"
# or
gem install bullet_log_parser

Example

cat log/bullet.log | bullet_log_filter.rb

bullet_log_filter.rb

#!/usr/bin/env ruby
# frozen_string_literal: true

begin
  require 'bullet_log_parser'
rescue LoadError => _e
  require 'bundler/setup'
  require 'bullet_log_parser'
end

if __FILE__ == $PROGRAM_NAME
  results = BulletLogParser.uniq_log($stdin) do |ast|
    # skip no call stack
    next if ast[:stack].empty?

    stack = ast[:stack].last
    puts "#{stack[:filename]}:#{stack[:lineno]}:#{ast[:level]}"
    ast[:details].each do |detail|
      puts "  #{detail}"
    end
    puts ''
  end
  puts '-- summary ------'
  puts results
    .keys
    .map { |k| "#{k}:#{results[k].size}" }
    .join("\n")
end

AST format

ast format example
2020-07-27 02:35:50[WARN] user: root
GET /posts
USE eager loading detected
  Post => [:comments]
  Add to your query: .includes([:comments])
Call stack
  /app/app/views/posts/_post.json.jbuilder:4:in `block in _app_views_posts__post_json_jbuilder__2280256895687227436_47114295576380'
  /app/app/views/posts/_post.json.jbuilder:3:in `_app_views_posts__post_json_jbuilder__2280256895687227436_47114295576380'
  /app/app/views/posts/index.json.jbuilder:1:in `_app_views_posts_index_json_jbuilder__4177424529561133656_47114295515920'
  /app/app/controllers/posts_controller.rb:13:in `index'
  /app/spec/requests/posts_spec.rb:45:in `block (4 levels) in <main>'
{
  "detectedAt": "2020-07-27 02:35:50",
  "level": "WARN",
  "user": "root",
  "request": "GET /posts",
  "detection": "USE eager loading detected",
  "details": [
    "Post => [:comments]",
    "Add to your query: .includes([:comments])"
  ],
  "stack": [
    {
      "filename": "/app/app/views/posts/_post.json.jbuilder",
      "lineno": 4,
      "message": "in `block in _app_views_posts__post_json_jbuilder__2280256895687227436_47114295576380'"
    },
    {
      "filename": "/app/app/views/posts/_post.json.jbuilder",
      "lineno": 3,
      "message": "in `_app_views_posts__post_json_jbuilder__2280256895687227436_47114295576380'"
    },
    {
      "filename": "/app/app/views/posts/index.json.jbuilder",
      "lineno": 1,
      "message": "in `_app_views_posts_index_json_jbuilder__4177424529561133656_47114295515920'"
    },
    {
      "filename": "/app/app/controllers/posts_controller.rb",
      "lineno": 13,
      "message": "in `index'"
    },
    {
      "filename": "/app/spec/requests/posts_spec.rb",
      "lineno": 45,
      "message": "in `block (4 levels) in <main>'"
    }
  ]
}