--- title: "Centralized Ruby Logging with Retrace" slug: "errors-and-logs-configure-ruby-applications" description: "Configure Ruby application with Stackify's API for sending Errors and Logs. Follow the step-by-step process and visit Stackify API for Ruby Github page." updated: 2020-03-13T20:35:08Z published: 2020-03-13T20:35:08Z canonical: "docs.stackify.com/errors-and-logs-configure-ruby-applications" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.stackify.com/llms.txt > Use this file to discover all available pages before exploring further. # Configure Ruby Logging To configure your Ruby application, an Application Programming Interface (API) can also be used to send Errors and Logs to Retrace. The step-by-step process is presented below and for more information, visit this Stackify API for Ruby Github page: [https://github.com/stackify/stackify-api-ruby.](https://github.com/stackify/stackify-api-ruby) ## Installation and Configuration ### Requirements: - Ruby 1.9/2.0/2.1 - Rails 3.x/4.x (optional) ### Rails Add the Stackify gem to your Gemfile. In the Gemfile: ``` gem 'stackify-api-ruby' ``` Run the bundle command to install it using the following command: ``` $ bundle install ``` Or install it manually: ``` $ gem install stackify-api-ruby ``` Once you are done installing stackify-api-ruby, you need to run the generator: ``` $ rails g stackify --api_key=your_api_key ``` The generator creates a file 'config/initializers/stackify.rb' that configures stackify-api-ruby with your API key. You can change the default settings in there. ### Non-Rails When using stackify-api-ruby gem within any Ruby application, add the following code snippet on the top of your main file: ``` require 'stackify-api-ruby' ``` Once you are done, you need to make a base configuration: ``` Stackify.setup do |config| config.api_key = "your_api_key" config.env = :development config.app_name = "Your app name" end ``` ## Optional Configuration The gem has three modes of configuration: "both", "logging", and "metrics". The mode "both" turns on both parts of gem - logging and metrics. If you only need one, either logging or metrics, choose "logging" or "metrics" mode accordingly. ``` config.mode = :metrics ``` If you want to use a proxy for sending a request, you can configure it like this: ``` config.proxy = { uri: '127.0.0.1:8118', user: 'user_name', password: 'some_password' } ``` ## Log API Usage ### Rails The stackify-api-ruby runs when Rails server is started. Every error, which occurs within your application, will be caught and sent to Retrace automatically. It has the same process with logs - you simply use the Rails logger using the following code snippet: ``` Rails.logger.info "Some log message" ``` If you want to redefine the **logger**, you should add the following ``` config.logger = ::Stackify::LoggerProxy.new(ActiveSupport::Logger.new(Rails.root.join('log', "#{Rails.env}.log"))) ``` to your config/environments/%environment%. > In this case, Stackify#config.log_level will affect entire system. ### Non-Rails Once you are done with logs configuration, you should wrap up your logger: ``` logger = Logger.new('mylog.log') logger = Stackify::LoggerProxy.new(logger) ``` And the last thing you need to do is to call the method "run": ``` Stackify.run #remember that this call is running in the background of your main script ``` ## Metrics API Usage Prerequisite Metrics requires **Ruby APM** to be enabled. There are four different types of metrics: - **Gauge**: Keeps track of the last value that was set in the current minute ``` Stackify::Metrics.set_gauge "MyCategory", "MyGauge", 100 ``` - **Counter**: Calculates the rate per minute ``` Stackify::Metrics.count "MyCategory", "MyCounter" ``` - **Average**: Calculates the average of all values in the current minute ``` Stackify::Metrics.average "MyCategory", "AverageSpeed", 200 ``` - **Timer**: Calculates the average elapsed time for an operation in the current minute ``` t = Time.now Stackify::Metrics.time "MyCategory", "ElapsedTime", t # or Stackify::Metrics.time_duration "MyCategory", "ElapsedTime", 5.seconds ``` - **Counter and Timer**: Composite of the Counter and Timer metrics for convenience ``` t = Time.now Stackify::Metrics.count_and_time "Metric", "CounterWithTime", t< ``` We can configure every metric with settings: ``` settings = Stackify::Metrics::MetricSettings.new settings.autoreport_zero_if_nothing_reported = true # or settings.autoreport_last_value_if_nothing_reported = true Stackify::Metrics.set_gauge "MyCategory", "MyGauge", 100 , settings ``` > The "autoreport_last_value_if_nothing_reported" property has influence only on "average" metric. ## Troubleshooting If there are problems, you can enable internal logging of the stackify-api-ruby project. You need to uncomment the config.logger and config.logger.level lines in the 'config/initializers/stackify.rb' file: ``` config.logger = Logger.new(Rails.root.join("log", "stackify.log")) config.logger.level = Logger::DEBUG ```