Last active
November 9, 2019 16:36
-
-
Save tmokmss/61cb67d0c7fc1e4e6163282cf87a6ebc to your computer and use it in GitHub Desktop.
stackdriver logger patch for usability
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
c.f. https://qiita.com/tomboyboy/items/e1e6f1865e066dde4a57