Reference documentation and code samples for the Cloud Logging API class Google::Cloud::Logging::AsyncWriter.
AsyncWriter
AsyncWriter buffers, batches, and transmits log entries efficiently. Writing log entries is asynchronous and will not block.
Batches that cannot be delivered immediately are queued. When the queue is full new batch requests will raise errors that can be consumed using the #on_error callback. This provides back pressure in case the writer cannot keep up with requests.
This object is thread-safe; it may accept write requests from multiple threads simultaneously, and will serialize them when executing in the background thread.
Inherits
- Object
Includes
- MonitorMixin
Example
require "google/cloud/logging" logging = Google::Cloud::Logging.new async = logging.async_writer entry1 = logging.entry payload: "Job started." entry2 = logging.entry payload: "Job completed." labels = { job_size: "large", job_code: "red" } resource = logging.resource "gae_app", "module_id" => "1", "version_id" => "20150925t173233" async.write_entries [entry1, entry2], log_name: "my_app_log", resource: resource, labels: labels
Methods
#async_stop!
def async_stop!(timeout = nil, force: nil) -> SymbolStop this asynchronous writer and block until it has been stopped.
-
timeout (Number, nil) — The maximum number of seconds to wait for
shutdown to complete. Will wait forever when the value is
nil. The default value isnil. - force (Boolean) (defaults to: nil) — If set to true, and the writer hasn't stopped within the given timeout, kill it forcibly by terminating the thread. This should be used with extreme caution, as it can leave RPCs unfinished. Default is false.
-
(Symbol) — Returns
:newif #write_entries has never been called on the AsyncWriter,:stoppedif it was already stopped at the time of invocation,:waitedif it stopped during the timeout period,:timeoutif it is still running after the timeout, or:forcedif it was forcibly killed.
#flush
def flush() -> AsyncWriterForces all entries in the current batch to be published immediately.
- (AsyncWriter) — returns self so calls can be chained.
#last_error
def last_error() -> Exception, nilThe most recent unhandled error to occur while transmitting log entries.
If an unhandled error has occurred the subscriber will attempt to recover from the error and resume buffering, batching, and transmitting log entries.
- (Exception, nil) — error The most recent error raised.
require "google/cloud/logging" logging = Google::Cloud::Logging.new resource = logging.resource "gae_app", module_id: "1", version_id: "20150925t173233" async = logging.async_writer logger = async.logger "my_app_log", resource, env: :production logger.info "Job started." # If an error was raised, it can be retrieved here: async.last_error #=> nil
#last_exception
def last_exception() -> Exception, nilThe most recent unhandled error to occur while transmitting log entries.
If an unhandled error has occurred the subscriber will attempt to recover from the error and resume buffering, batching, and transmitting log entries.
- (Exception, nil) — error The most recent error raised.
require "google/cloud/logging" logging = Google::Cloud::Logging.new resource = logging.resource "gae_app", module_id: "1", version_id: "20150925t173233" async = logging.async_writer logger = async.logger "my_app_log", resource, env: :production logger.info "Job started." # If an error was raised, it can be retrieved here: async.last_error #=> nil
#logger
def logger(log_name, resource, labels = {}) -> Google::Cloud::Logging::LoggerCreates a logger instance that is API-compatible with Ruby's standard library Logger.
The logger will use AsyncWriter to transmit log entries on a background thread.
- log_name (String) — A log resource name to be associated with the written log entries.
- resource (Google::Cloud::Logging::Resource) — The monitored resource to be associated with written log entries.
- labels (Hash) — A set of user-defined data to be associated with written log entries.
- (Google::Cloud::Logging::Logger) — a Logger object that can be used in place of a ruby standard library logger object.
require "google/cloud/logging" logging = Google::Cloud::Logging.new resource = logging.resource "gae_app", module_id: "1", version_id: "20150925t173233" async = logging.async_writer logger = async.logger "my_app_log", resource, env: :production logger.info "Job started."
#on_error
def on_error(&block) { |error| ... }Register to be notified of errors when raised.
If an unhandled error has occurred the writer will attempt to recover from the error and resume buffering, batching, and transmitting log entries
Multiple error handlers can be added.
- (callback) — The block to be called when an error is raised.
- error (Exception) — The error raised.
require "google/cloud/logging" require "google/cloud/error_reporting" logging = Google::Cloud::Logging.new resource = logging.resource "gae_app", module_id: "1", version_id: "20150925t173233" async = logging.async_writer # Register to be notified when unhandled errors occur. async.on_error do |error| # error can be a AsyncWriterError or AsyncWriteEntriesError Google::Cloud::ErrorReporting.report error end logger = async.logger "my_app_log", resource, env: :production logger.info "Job started."
#started?
def started?() -> booleanWhether the writer has been started.
-
(boolean) —
truewhen started,falseotherwise.
#stop
def stop() -> AsyncWriterBegins the process of stopping the writer. Entries already in the queue will be published, but no new entries can be added. Use #wait! to block until the writer is fully stopped and all pending entries have been published.
- (AsyncWriter) — returns self so calls can be chained.
#stop!
def stop!(timeout = nil, force: nil) -> SymbolStop this asynchronous writer and block until it has been stopped.
-
timeout (Number, nil) — The maximum number of seconds to wait for
shutdown to complete. Will wait forever when the value is
nil. The default value isnil. - force (Boolean) (defaults to: nil) — If set to true, and the writer hasn't stopped within the given timeout, kill it forcibly by terminating the thread. This should be used with extreme caution, as it can leave RPCs unfinished. Default is false.
-
(Symbol) — Returns
:newif #write_entries has never been called on the AsyncWriter,:stoppedif it was already stopped at the time of invocation,:waitedif it stopped during the timeout period,:timeoutif it is still running after the timeout, or:forcedif it was forcibly killed.
#stopped?
def stopped?() -> booleanWhether the writer has been stopped.
-
(boolean) —
truewhen stopped,falseotherwise.
#wait!
def wait!(timeout = nil) -> AsyncWriterBlocks until the writer is fully stopped, all pending entries have been published, and all callbacks have completed. Does not stop the writer. To stop the writer, first call #stop and then call #wait! to block until the writer is stopped.
-
timeout (Number, nil) — The maximum number of seconds to wait for
shutdown to complete. Will wait forever when the value is
nil. The default value isnil.
- (AsyncWriter) — returns self so calls can be chained.
#write_entries
def write_entries(entries, log_name: nil, resource: nil, labels: nil) -> Google::Cloud::Logging::AsyncWriterAsynchronously write one or more log entries to the Stackdriver Logging service.
Unlike the main write_entries method, this method usually does not block. The actual write RPCs will happen in the background, and may be batched with related calls. However, if the queue is full, this method will block until enough space has cleared out.
- entries (Google::Cloud::Logging::Entry, Array<Google::Cloud::Logging::Entry>) — One or more entry objects to write. The log entries must have values for all required fields.
-
log_name (String) (defaults to: nil) — A default log ID for those log entries in
entriesthat do not specify their ownlog_name. See also Entry#log_name=. - resource (Resource) (defaults to: nil) — A default monitored resource for those log entries in entries that do not specify their own resource. See also Entry#resource.
-
labels (Hash{Symbol,String => String}) (defaults to: nil) — User-defined
key:valueitems that are added to thelabelsfield of each log entry inentries, except when a log entry specifies its ownkey:valueitem with the same key. See also Entry#labels=.
- (Google::Cloud::Logging::AsyncWriter) — Returns self.
require "google/cloud/logging" logging = Google::Cloud::Logging.new async = logging.async_writer entry = logging.entry payload: "Job started.", log_name: "my_app_log" entry.resource.type = "gae_app" entry.resource.labels[:module_id] = "1" entry.resource.labels[:version_id] = "20150925t173233" async.write_entries entry