log_inspector
is a mountable Rails engine with routes/views for displaying the contents of your Rails log directory (or any other directory).
A live demo can be found at:
http://log-inspector.seanhuber.com
Unix based operating system (Apple OSX or Linux).
The unix commands
wc
andtail
are used to get log file contents and line counts.
Rails >= 4.2
This engine was developed with Rails 4.2 and has been tested to work with Rails 5.0.x and 5.1.x.
jQuery and jQuery-ui.
These are required by the
folder-tree
jQuery widget (which is used to display the contents of the log folder). For more information onfolder-tree
, see: https://github.com/seanhuber/folder-tree
Add to your Gemfile
:
gem 'log_inspector', '~> 1.1.2'
Then, bundle install
.
For basic usage, mount the engine in config/routes.rb
, e.g.,
Rails.application.routes.draw do
mount LogInspector::Engine => '/log_inspector'
# ... your other application routes
end
Restart your rails server and navigate to http://localhost:3000/log_inspector
Click on subfolders to expend them and click on text-based files to view their contents in the preview pane.
If your log directory is located somewhere that is not <app root>/log
, you can set the path in an initializer:
LogInspector.log_path = '/path/to/log/directory'
If you want to embed log_inspector
inside of a custom view, you'll first need to add to log_inspector
's assets to the pipeline. In app/assets/stylesheets/application.css
, add:
/*
*= require log_inspector/folder-tree
*= require log_inspector/log-inspector
*/
In app/assets/javascripts/application.js
, add:
//= require log_inspector/folder-tree
//= require log_inspector/log_inspector
Then in an erb
view file, render log_inspector
's primary partial:
<%= render partial: 'log_inspector/panes' %>
Generally you would not want to expose the contents of your log files in the production environment, but log_inspector
does not have any restrictions built in. To add constraints it's advised that you add them yourself, see: http://guides.rubyonrails.org/routing.html#advanced-constraints
To simply disable all routes in the production environment you could modify your config/routes.rb
to something like:
Rails.application.routes.draw do
mount LogInspector::Engine => '/log_inspector' unless Rails.env.production?
# ... your other application routes
end
Or if you do want the engine enabled in production and wish to limit access to specific users, try a strategy like this:
Rails.application.routes.draw do
mount LogInspector::Engine => '/log_inspector', constraints: CustomConstraint.new
# ... your other application routes
end
And define your CustomConstraint
class in lib/custom_constraint.rb
:
class CustomConstraint
# this class assumes you've set a session variable 'user_roles' which is an array of strings
def matches?(request)
request.session['user_roles'].is_a?(Array) && request.session['user_roles'].include?('admin')
end
end
MIT-LICENSE.