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 .
gem 'log4r' gem 'log4r-gelf'
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