Class: Google::Cloud::Logging::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/google/cloud/logging/rails.rb

Overview

Railtie

Google::Cloud::Logging::Railtie automatically add the Google::Cloud::Logging::Middleware to Rack in a Rails environment. The middleware will set env['rack.logger'] to a Google::Cloud::Logging::Logger instance to be used by the Rails application.

The Middleware is only added when certain conditions are met. See Railtie.use_logging? for detail.

When loaded, the Google::Cloud::Logging::Middleware will be inserted before the Rails::Rack::Logger Middleware, which allows it to set the env['rack.logger'] in place of Rails's default logger. The Railtie should also initialize the logger with correct GCP project_id and keyfile if they are defined in Rails environment.rb as follow: config.google_cloud.logging.project_id = "my-gcp-project" config.google_cloud.logging.keyfile = "/path/to/secret.json" or config.google_cloud.project_id = "my-gcp-project" config.google_cloud.keyfile = "/path/to/secret.json" If omitted, project_id will be initialized with default environment variables.

Class Method Summary collapse

Class Method Details

.use_logging?(config) ⇒ Boolean

Determine whether to use Stackdriver Logging or not.

Returns true if valid GCP project_id is provided and underneath API is able to authenticate. Also either Rails needs to be in "production" environment or config.stackdriver.use_logging is explicitly true.

Parameters:

  • config

    The Rails.application.config

Returns:

  • (Boolean)


88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/google/cloud/logging/rails.rb', line 88

def self.use_logging? config
  gcp_config = config.google_cloud
  # Return false if config.stackdriver.use_logging is explicitly false
  return false if gcp_config.key?(:use_logging) &&
                  !gcp_config.use_logging

  # Try authenticate authorize client API. Return false if unable to
  # authorize.
  keyfile = gcp_config.logging.keyfile || gcp_config.keyfile
  begin
    Google::Cloud::Logging::Credentials.credentials_with_scope keyfile
  rescue Exception => e
    warn "Unable to initialize Google::Cloud::Logging due " \
      "to authorization error: #{e.message}"
    return false
  end

  project_id = gcp_config.logging.project_id || gcp_config.project_id ||
               Google::Cloud::Logging::Project.default_project
  if project_id.to_s.empty?
    warn "Unable to initialize Google::Cloud::Logging with empty " \
      "project_id"
    return false
  end

  # Otherwise default to true if Rails is running in production or
  # config.stackdriver.use_logging is explicitly true
  Rails.env.production? ||
    (gcp_config.key?(:use_logging) && gcp_config.use_logging)
end