Skip to content

Instantly share code, notes, and snippets.

@tmokmss
Last active November 9, 2019 16:36
Show Gist options
  • Save tmokmss/61cb67d0c7fc1e4e6163282cf87a6ebc to your computer and use it in GitHub Desktop.
Save tmokmss/61cb67d0c7fc1e4e6163282cf87a6ebc to your computer and use it in GitHub Desktop.
stackdriver logger patch for usability
require "google/cloud/logging"
class StackdriverLogger < Google::Cloud::Logging::Logger
module EntryRefinement
refine Google::Cloud::Logging::Entry do
attr_accessor :http_request
end
end
using EntryRefinement
def initialize(log_name:, labels:)
logging = Google::Cloud::Logging.new
writer = logging.async_writer(max_queue_size: 1000)
resource = logging.resource("global", labels: {module_id: log_name})
super(writer, log_name, resource, labels)
end
private
def write_entry(severity, message)
message = format_message(format_severity(severity), Time.now, progname, message)
entry = Google::Cloud::Logging::Entry.new.tap do |e|
e.timestamp = Time.now
e.severity = gcloud_severity(severity)
e.payload = message
e.http_request = Google::Cloud::Logging::Entry::HttpRequest.new.tap do |h|
h.method = message.delete(:method)
h.user_agent = message.delete(:ua)
h.url = message.delete(:path)
h.status = message.delete(:status)
if message[:payload].is_a?(Hash)
h.size = message[:payload][:request_params]&.inspect&.length
h.response_size = message[:payload][:response_body]&.inspect&.length
end
end
end
actual_log_name = log_name
info = request_info
if info
actual_log_name = info.log_name || actual_log_name
unless info.trace_id.nil? || @project.nil?
entry.trace = "projects/#{@project}/traces/#{info.trace_id}"
end
entry.trace_sampled = info.trace_sampled if entry.trace_sampled.nil?
end
writer.write_entries entry, log_name: actual_log_name,
resource: resource,
labels: entry_labels(info)
end
# Severity label for logging (max 5 chars).
SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY).each(&:freeze).freeze
def format_severity(severity)
SEV_LABEL[severity] || 'ANY'
end
def format_message(severity, datetime, progname, msg)
@formatter.call(severity, datetime, progname, msg)
end
end
@tmokmss
Copy link
Author

tmokmss commented Nov 9, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment