Rails default logger is quite simple.but it becomes quite difficult to debug in production as the app grows big. Imagine you have 5 different app servers and you have to grep all the log files. Some simple shell scripting could ease the pain but still log file is quite messed up and it still wont help you to analyse which url returned 500, time taken by the api etc. It would then be great to have all logs in a centralised location easing up the pain of developers. Yes ! There is a gem for that! 🙂
Log4r is a powerful and flexible ruby gem used for logging in ruby inspired by the popular java library log4j. It supports multiple output destinations per log level, custom log levels etc. Checkout the library .
You might also need to check graylog. Graylog is an open source log management solution that can be used to monitor your logs. It is built on the top of java, mongodb, elasticsearch . To know more about it click here. Graylog also comes with a web interface. Check out the link to see to setup graylog web interface using nginx as a reverse proxy .
I used gem ‘log4r-gelf‘ along with log4r to sent my logs to graylog. All log4r and ‘log4r-gelf‘ in your gem file
gem 'log4r' gem 'log4r-gelf'
and do
bundle install
2. Now create a yml file log4r.yml.
log4r_config: loggers: - name: production level: INFO trace : false outputters: - production - gelf - name: development level: DEBUG trace: true outputters: - development outputters: - type: DateFileOutputter name: production filename: production.log dirname: "log" formatter: date_pattern: '%H:%M:%S' pattern: '%d %l: %m ' type: PatternFormatter - type: GelfOutputter name: gelf gelf_server: "example.graylog.in" gelf_port: "12219" level: INFO
3. Next in the application.rb
require 'log4r' require 'log4r/yamlconfigurator' require 'log4r/outputter/datefileoutputter' include Log4r module DemoApi log4r_config = YAML.load_file(File.join(Rails.root, 'config', 'log4r.yml')) YamlConfigurator.decode_yaml( log4r_config["log4r_config"] ) config.logger = Log4r::Logger[Rails.env] end
Hi. I am getting the following error. ‘/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/psych.rb:370:in `parse’: config/log4r.yml): did not find expected key while parsing a block mapping at line 2 column 2 (Psych::SyntaxError)’
my log4r.yml
log4r_config:
loggers:
– name: production
level: INFO
trace : false
outputters:
– production
– gelf
– name: development
level: DEBUG
trace: true
outputters:
– development
outputters:
– type: DateFileOutputter
name: production
filename: production.log
dirname: “log”
formatter:
date_pattern: ‘%H:%M:%S’
pattern: ‘%d %l: %m ‘
type: PatternFormatter
– type: GelfOutputter
name: gelf
gelf_server: “example.graylog.in”
gelf_port: “12219”
level: INFO
Where am I missing? Please help.
LikeLike
You have an error in your yml file
LikeLike
Thanks for the response. could not find the error. can you help?
LikeLike
Please use this
https://pastebin.com/VtCuHnTZ
LikeLike
Please use this
https://pastebin.com/VtCuHnTZ
LikeLike
Thank you. Now am getting this error.
‘/log4r/yamlconfigurator.rb:104:in `[]’: no implicit conversion of String into Integer (TypeError)’
Can please you help for it?
LikeLike
Try this https://pastebin.com/3mftpQyz
LikeLike