Strum::Logs

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file lib/strum/logs. To experiment with that code, run bin/console for an interactive prompt.

TODO: Delete this and the text above, and describe your gem

Installation

Add this line to your application's Gemfile:

gem 'strum-logs'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install strum-logs

Usage

In order to start working with this gem, following configuration must be enabled:

StrumLogs::Configuration.configure do |config|
  config.application_version = "1.0.0"
  config.application_name = "app name"
  config.redis_instrumentation = true
  config.rack_instrumentation = true
  config.environment = "development"
end

This configuration allows to use rack and redis open telemetry tracing. Redis logger can be enabled using following configuration:

StrumLogs::Configuration.configure do |config|
  config.redis_after_call_hooks = [StrumLogs::Redis::Logger.new]
end

Example of redis logs:

{
             :request => "get hello",
             :message => "redis request",
    :response_message => "world",
        :service_name => "app name",
             :version => "1.0.0",
            :trace_id => "0973f2d0c2f92ce3b29e41638d09bc89",
             :span_id => "37fc1030e7b8413c"
}

Rack logging can be enabled as rack middleware:

require 'roda'
require 'strum_logs'

class AppName < Roda
  use StrumLogs::Rack::RequestLogMiddleware

Example of rack logs:

{
              :method => "GET",
                :path => "/wp-debts/info",
               :query => "",
            :protocol => "HTTP/1.1",
          :started_at => 2022-08-02 11:04:15.588912879 +0300,
                :peer => "127.0.0.1",
             :message => "HTTP Request",
                :user => nil,
              :status => 200,
             :headers => {
          "Content-Type" => "application/vnd.api+json",
        "Content-Length" => "20",
           "traceparent" => "00-0973f2d0c2f92ce3b29e41638d09bc89-37fc1030e7b8413c-01"
    },
    :response_message => "{\"data\":[],\"meta\":0}",
          :log_status => "success",
             :request => nil,
            :finished => 2022-08-02 11:04:17.549062761 +0300,
          :elapsed_ms => 1960.1499,
        :service_name => "app name",
             :version => "1.0.0",
            :trace_id => "0973f2d0c2f92ce3b29e41638d09bc89",
             :span_id => "37fc1030e7b8413c"
}

Faraday logs can be enabled by using Faraday middleware:

require 'strum_logs'
conn = Faraday.new(url: https://example.com/, headers: {}) do |c|
        c.use StrumLogs::Faraday::RequestLogMiddleware
      end

To enable faraday open telemetry tracing, following config should be enabled:

StrumLogs::Configuration.configure do |config|
  config.faraday_instrumentation = true
end

To enable strum esb logs, following configuration must be added to strum esb configs:

Strum::Esb.configure do |config|
  config.before_publish_hooks = [StrumLogs::StrumEsbHooks.method(:before_publish_hook)]
  config.before_handler_hooks = [StrumLogs::StrumEsbHooks.method(:before_handler_hook)]
  config.after_handler_hooks = [StrumLogs::StrumEsbHooks.method(:after_handler_hook)]
end

Strum esb logs example:

{
         :message => "Handling AMQP message",
            :body => "{ \"hello\": \"world\" }",
      :properties => {
        :consumer_tag => "bunny-1659424153000-768018451868",
        :delivery_tag => #<Bunny::VersionedDeliveryTag:0x0000558005b4edf0 @tag=1, @version=0>,
         :redelivered => false,
            :exchange => "",
         :routing_key => "test_hooks",
            :consumer => #<Bunny::Consumer:9180 @channel_id=1 @queue=test_hooks> @consumer_tag=bunny-1659424153000-768018451868 @exclusive= @no_ack=false>,
             :channel => #<Bunny::Channel:9200 @id=1 @connection=#<Bunny::Session:0x4628 [email protected]:5672, vhost=/, addresses=[rabbit.lvh.me:5672]>> @open=true
    },
        :protocol => "AMQP",
        :metadata => {
              :headers => {
              "action" => "test",
            "resource" => "hello"
        },
        :delivery_mode => 1
    },
    :service_name => "working permits debts",
         :version => "1.0.1",
        :trace_id => "00000000000000000000000000000000",
         :span_id => "0000000000000000"
}

To use rabbit open telemetry traces, following configuration should be set:

StrumLogs::Configuration.configure do |config|
  config.rabbit_instrumentation = true
end

To use sequel logger, strum logger should be added to sequel loggers:

DB.logger = StrumLogs::Sequel::Logger.new

Configuration options

Gem has a number of configuration options. Note, that some of them are required to be specified in order for gem to be working

StrumLogs::Configuration.configure do |config|
  config.stdout_sync = true                  # Sets std_out_sync to true, true by default
  config.level = Logger::INFO                # Sets log level, info by default
  config.application_version = "1.0.0"       # Sets app version, mandatory configuration
  config.application_name = "app name"       # Sets app name, mandatory field
  config.redis_instrumentation = false       # Turns on redis logger and open telemetry tracing for redis, false by default
  config.rack_instrumentation = false        # Turns on rack open telemetry traces, false by default
  config.faraday_instrumentation = true      # Turns on faraday open telemetry traces, false by default
  config.rabbit_instrumentation = true       # Turns on bunny open telemetry traces, false by default
  config.stack_trace = true                  # Turns on error stack trace field, true by default
  config.environment = ENV["RACK_ENV"]       # Is set by RACK_ENV environmental variable, development by default
  config.enable_export_spans = false         # Span export, false by default
  config.redis_after_call_hooks = []         # Is used to add hooks after redis call (currently is used to add log hook)
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/strum-logs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Strum::Logs project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.