google-cloud-logging 0.23.0 → 0.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a74cfb2524ed0697d16624513a1cd6f8731525ba
|
4
|
+
data.tar.gz: f5022540c7a2ec3fecc06b730ee1c787c6920527
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44fda14faba568efd1d87a208e3764c4aeb3101549b72ffaf8d90f37d13601fcb236e21969e0f772d0d82ece0a9e7b025326c19fd76be0395b7c08f8c8663201
|
7
|
+
data.tar.gz: 91842b1780df095396c2a0d11321d3166eb59fdf582bbf26f0aa59ab9ab618d2a8bea8dc283c032b3f786821ccfb3cfad1c61a372f242a53d2e4f3ccf5ba44a6
|
@@ -12,6 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require "set"
|
16
|
+
|
15
17
|
|
16
18
|
module Google
|
17
19
|
module Cloud
|
@@ -52,6 +54,11 @@ module Google
|
|
52
54
|
#
|
53
55
|
class AsyncWriter
|
54
56
|
DEFAULT_MAX_QUEUE_SIZE = 10000
|
57
|
+
CLEANUP_TIMEOUT = 10.0
|
58
|
+
WAIT_INTERVAL = 1.0
|
59
|
+
|
60
|
+
@cleanup_list = nil
|
61
|
+
@exit_lock = Mutex.new
|
55
62
|
|
56
63
|
##
|
57
64
|
# @private Item in the log entries queue.
|
@@ -308,7 +315,8 @@ module Google
|
|
308
315
|
# Blocks until this asynchronous writer has been stopped, or the given
|
309
316
|
# timeout (if present) has elapsed.
|
310
317
|
#
|
311
|
-
# @param [Number] timeout Timeout in seconds, or nil for no
|
318
|
+
# @param [Number, nil] timeout Timeout in seconds, or `nil` for no
|
319
|
+
# timeout.
|
312
320
|
#
|
313
321
|
# @return [Boolean] Returns true if the writer is stopped, or false
|
314
322
|
# if the timeout expired.
|
@@ -320,12 +328,37 @@ module Google
|
|
320
328
|
until state == :stopped
|
321
329
|
cur_time = ::Time.new.to_f
|
322
330
|
return false if deadline && cur_time >= deadline
|
323
|
-
|
331
|
+
interval = deadline ? deadline - cur_time : WAIT_INTERVAL
|
332
|
+
interval = WAIT_INTERVAL if interval > WAIT_INTERVAL
|
333
|
+
@lock_cond.wait interval
|
324
334
|
end
|
325
335
|
end
|
326
336
|
true
|
327
337
|
end
|
328
338
|
|
339
|
+
##
|
340
|
+
# Stop this asynchronous writer and block until it has been stopped.
|
341
|
+
#
|
342
|
+
# @param [Number] timeout Timeout in seconds.
|
343
|
+
# @param [Boolean] force If set to true, and the writer hasn't stopped
|
344
|
+
# within the given timeout, kill it forcibly by terminating the
|
345
|
+
# thread. This should be used with extreme caution, as it can
|
346
|
+
# leave RPCs unfinished. Default is false.
|
347
|
+
#
|
348
|
+
# @return [Symbol] Returns `:stopped` if the AsyncWriter was already
|
349
|
+
# stopped at the time of invocation, `:waited` if it stopped
|
350
|
+
# during the timeout period, `:timeout` if it is still running
|
351
|
+
# after the timeout, or `:forced` if it was forcibly killed.
|
352
|
+
#
|
353
|
+
def stop! timeout, force: false
|
354
|
+
return :stopped unless stop
|
355
|
+
return :waited if wait_until_stopped timeout
|
356
|
+
return :timeout unless force
|
357
|
+
@thread.kill
|
358
|
+
@thread.join
|
359
|
+
:forced
|
360
|
+
end
|
361
|
+
|
329
362
|
protected
|
330
363
|
|
331
364
|
##
|
@@ -341,14 +374,18 @@ module Google
|
|
341
374
|
@queue = []
|
342
375
|
@lock = Monitor.new
|
343
376
|
@lock_cond = @lock.new_cond
|
344
|
-
|
377
|
+
AsyncWriter.register_for_cleanup self
|
378
|
+
@thread = Thread.new do
|
379
|
+
run_backgrounder
|
380
|
+
AsyncWriter.unregister_for_cleanup self
|
381
|
+
end
|
345
382
|
end
|
346
383
|
end
|
347
384
|
end
|
348
385
|
|
349
386
|
##
|
350
387
|
# @private The background thread implementation, which continuously
|
351
|
-
# waits for performs work, and returns only when fully stopped.
|
388
|
+
# waits for and performs work, and returns only when fully stopped.
|
352
389
|
#
|
353
390
|
def run_backgrounder
|
354
391
|
loop do
|
@@ -367,14 +404,18 @@ module Google
|
|
367
404
|
@last_exception = e
|
368
405
|
end
|
369
406
|
end
|
407
|
+
ensure
|
408
|
+
# If something drastic happened like the thread was killed, make
|
409
|
+
# sure the state is consistent.
|
410
|
+
@state = :stopped
|
370
411
|
end
|
371
412
|
|
372
413
|
##
|
373
414
|
# @private Wait for and dequeue the next set of log entries to transmit.
|
374
415
|
#
|
375
|
-
# @return [QueueItem,
|
416
|
+
# @return [QueueItem, nil] Returns the next set of entries. If
|
376
417
|
# the writer has been stopped and no more entries are left in the
|
377
|
-
# queue, returns nil
|
418
|
+
# queue, returns `nil`.
|
378
419
|
#
|
379
420
|
def wait_next_item
|
380
421
|
@lock.synchronize do
|
@@ -382,14 +423,55 @@ module Google
|
|
382
423
|
(state == :running && @queue.empty?)
|
383
424
|
@lock_cond.wait
|
384
425
|
end
|
426
|
+
queue_item = nil
|
385
427
|
if @queue.empty?
|
386
428
|
@state = :stopped
|
387
|
-
nil
|
388
429
|
else
|
389
430
|
queue_item = @queue.shift
|
390
431
|
@queue_size -= queue_item.entries.size
|
391
|
-
|
392
|
-
|
432
|
+
end
|
433
|
+
@lock_cond.broadcast
|
434
|
+
queue_item
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
##
|
439
|
+
# Register the given AsyncWriter for cleanup on VM exit.
|
440
|
+
#
|
441
|
+
# @private
|
442
|
+
#
|
443
|
+
def self.register_for_cleanup async
|
444
|
+
@exit_lock.synchronize do
|
445
|
+
unless @cleanup_list
|
446
|
+
@cleanup_list = ::Set.new
|
447
|
+
at_exit { AsyncWriter.run_cleanup }
|
448
|
+
end
|
449
|
+
@cleanup_list.add async
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
##
|
454
|
+
# Unregister the given AsyncWriter for cleanup on VM exit.
|
455
|
+
#
|
456
|
+
# @private
|
457
|
+
#
|
458
|
+
def self.unregister_for_cleanup async
|
459
|
+
@exit_lock.synchronize do
|
460
|
+
@cleanup_list.delete async if @cleanup_list
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
##
|
465
|
+
# Exit hook that cleans up any running AsyncWriters.
|
466
|
+
#
|
467
|
+
# @private
|
468
|
+
#
|
469
|
+
def self.run_cleanup
|
470
|
+
@exit_lock.synchronize do
|
471
|
+
if @cleanup_list
|
472
|
+
@cleanup_list.each do |async|
|
473
|
+
async.stop! CLEANUP_TIMEOUT, force: true
|
474
|
+
end
|
393
475
|
end
|
394
476
|
end
|
395
477
|
end
|
@@ -21,7 +21,8 @@ module Google
|
|
21
21
|
##
|
22
22
|
# # Logger
|
23
23
|
#
|
24
|
-
#
|
24
|
+
# An API-compatible replacement for ruby's Logger that logs to the
|
25
|
+
# Stackdriver Logging Service.
|
25
26
|
#
|
26
27
|
# @example
|
27
28
|
# require "google/cloud/logging"
|
@@ -36,6 +37,18 @@ module Google
|
|
36
37
|
# logger.info "Job started."
|
37
38
|
#
|
38
39
|
class Logger
|
40
|
+
##
|
41
|
+
# A RequestInfo represents data about the request being handled by the
|
42
|
+
# current thread. It is used to configure logs coming from that thread.
|
43
|
+
#
|
44
|
+
# The trace_id is a String that controls the trace ID sent with the log
|
45
|
+
# entry. If it is nil, no trace ID is sent.
|
46
|
+
#
|
47
|
+
# The log_name is a String that controls the name of the Stackdriver
|
48
|
+
# log to write to. If it is nil, the default log_name for this Logger
|
49
|
+
# is used.
|
50
|
+
RequestInfo = ::Struct.new :trace_id, :log_name
|
51
|
+
|
39
52
|
##
|
40
53
|
# The Google Cloud writer object that calls to {#write_entries} are made
|
41
54
|
# on. Either an AsyncWriter or Project object.
|
@@ -44,6 +57,7 @@ module Google
|
|
44
57
|
##
|
45
58
|
# The Google Cloud log_name to write the log entry with.
|
46
59
|
attr_reader :log_name
|
60
|
+
alias_method :progname, :log_name
|
47
61
|
|
48
62
|
##
|
49
63
|
# The Google Cloud resource to write the log entry with.
|
@@ -53,11 +67,37 @@ module Google
|
|
53
67
|
# The Google Cloud labels to write the log entry with.
|
54
68
|
attr_reader :labels
|
55
69
|
|
70
|
+
##
|
71
|
+
# The logging severity threshold (e.g. `Logger::INFO`)
|
72
|
+
attr_reader :level
|
73
|
+
alias_method :sev_threshold, :level
|
74
|
+
|
75
|
+
##
|
76
|
+
# This logger does not use a formatter, but it provides a default
|
77
|
+
# Logger::Formatter for API compatibility with the standard Logger.
|
78
|
+
attr_accessor :formatter
|
79
|
+
|
80
|
+
##
|
81
|
+
# This logger does not use a formatter, but it implements this
|
82
|
+
# attribute for API compatibility with the standard Logger.
|
83
|
+
attr_accessor :datetime_format
|
84
|
+
|
85
|
+
##
|
86
|
+
# This logger treats progname as an alias for log_name.
|
87
|
+
def progname= name
|
88
|
+
@log_name = name
|
89
|
+
end
|
90
|
+
|
56
91
|
##
|
57
92
|
# A OrderedHash of Thread IDs to Stackdriver request trace ID. The
|
58
93
|
# Stackdriver trace ID is a shared request identifier across all
|
59
94
|
# Stackdriver services.
|
60
|
-
|
95
|
+
#
|
96
|
+
# @deprecated Use request_info
|
97
|
+
#
|
98
|
+
def trace_ids
|
99
|
+
@request_info.inject({}) { |r, (k, v)| r[k] = v.trace_id }
|
100
|
+
end
|
61
101
|
|
62
102
|
##
|
63
103
|
# Create a new Logger instance.
|
@@ -101,7 +141,11 @@ module Google
|
|
101
141
|
@resource = resource
|
102
142
|
@labels = labels
|
103
143
|
@level = 0 # DEBUG is the default behavior
|
104
|
-
@
|
144
|
+
@request_info = OrderedHash.new
|
145
|
+
@closed = false
|
146
|
+
# Unused, but present for API compatibility
|
147
|
+
@formatter = ::Logger::Formatter.new
|
148
|
+
@datetime_format = ""
|
105
149
|
end
|
106
150
|
|
107
151
|
##
|
@@ -240,10 +284,21 @@ module Google
|
|
240
284
|
end
|
241
285
|
end
|
242
286
|
|
243
|
-
write_entry severity, message
|
287
|
+
write_entry severity, message unless @closed
|
288
|
+
true
|
244
289
|
end
|
245
290
|
alias_method :log, :add
|
246
291
|
|
292
|
+
##
|
293
|
+
# Logs the given message at UNKNOWN severity.
|
294
|
+
#
|
295
|
+
# @param [String] msg The log entry payload as a string.
|
296
|
+
#
|
297
|
+
def << msg
|
298
|
+
unknown msg
|
299
|
+
self
|
300
|
+
end
|
301
|
+
|
247
302
|
##
|
248
303
|
# Returns `true` if the current severity level allows for sending
|
249
304
|
# `DEBUG` messages.
|
@@ -306,29 +361,88 @@ module Google
|
|
306
361
|
end
|
307
362
|
alias_method :sev_threshold=, :level=
|
308
363
|
|
364
|
+
##
|
365
|
+
# Close the logging "device". This effectively disables logging from
|
366
|
+
# this logger; any further log messages will be silently ignored. The
|
367
|
+
# logger may be re-enabled by calling #reopen.
|
368
|
+
#
|
369
|
+
def close
|
370
|
+
@closed = true
|
371
|
+
self
|
372
|
+
end
|
373
|
+
|
374
|
+
##
|
375
|
+
# Re-enable logging if the logger has been closed.
|
376
|
+
#
|
377
|
+
# Note that this method accepts a "logdev" argument for compatibility
|
378
|
+
# with the standard Ruby Logger class; however, this argument is
|
379
|
+
# ignored because this logger does not use a log device.
|
380
|
+
#
|
381
|
+
def reopen _logdev = nil
|
382
|
+
@closed = false
|
383
|
+
self
|
384
|
+
end
|
385
|
+
|
309
386
|
##
|
310
387
|
# Track a given trace_id by associating it with the current
|
311
388
|
# Thread
|
312
389
|
#
|
313
|
-
# @
|
314
|
-
#
|
390
|
+
# @deprecated Use add_request_info
|
391
|
+
#
|
315
392
|
def add_trace_id trace_id
|
316
|
-
|
393
|
+
add_request_id trace_id: trace_id
|
394
|
+
end
|
395
|
+
|
396
|
+
##
|
397
|
+
# Associate request data with the current Thread. You may provide
|
398
|
+
# either the individual pieces of data (trace ID, log name) or a
|
399
|
+
# populated RequestInfo object.
|
400
|
+
#
|
401
|
+
# @param [RequestInfo] info Info about the current request. Optional.
|
402
|
+
# If not present, a new RequestInfo is created using the remaining
|
403
|
+
# parameters.
|
404
|
+
# @param [String, nil] trace_id The trace ID, or `nil` if no trace ID
|
405
|
+
# should be logged.
|
406
|
+
# @param [String, nil] log_name The log name to use, or nil to use
|
407
|
+
# this logger's default.
|
408
|
+
#
|
409
|
+
def add_request_info info: nil,
|
410
|
+
trace_id: nil,
|
411
|
+
log_name: nil
|
412
|
+
info ||= RequestInfo.new trace_id, log_name
|
413
|
+
@request_info[current_thread_id] = info
|
317
414
|
|
318
415
|
# Start removing old entries if hash gets too large.
|
319
416
|
# This should never happen, because middleware should automatically
|
320
417
|
# remove entries when a request is finished
|
321
|
-
|
418
|
+
@request_info.shift while @request_info.size > 10_000
|
419
|
+
|
420
|
+
info
|
322
421
|
end
|
323
422
|
|
324
423
|
##
|
325
|
-
#
|
424
|
+
# Get the request data for the current Thread
|
425
|
+
#
|
426
|
+
# @return [RequestInfo, nil] The request data for the current thread,
|
427
|
+
# or `nil` if there is no data set.
|
326
428
|
#
|
327
|
-
|
328
|
-
|
329
|
-
trace_ids.delete current_thread_id
|
429
|
+
def request_info
|
430
|
+
@request_info[current_thread_id]
|
330
431
|
end
|
331
432
|
|
433
|
+
##
|
434
|
+
# Untrack the RequestInfo that's associated with current Thread
|
435
|
+
#
|
436
|
+
# @return [RequestInfo] The info that's being deleted
|
437
|
+
#
|
438
|
+
def delete_request_info
|
439
|
+
@request_info.delete current_thread_id
|
440
|
+
end
|
441
|
+
|
442
|
+
##
|
443
|
+
# @deprecated Use delete_request_info
|
444
|
+
alias_method :delete_trace_id, :delete_request_info
|
445
|
+
|
332
446
|
protected
|
333
447
|
|
334
448
|
##
|
@@ -340,12 +454,18 @@ module Google
|
|
340
454
|
e.payload = message
|
341
455
|
end
|
342
456
|
|
343
|
-
# merge input labels and
|
344
|
-
|
345
|
-
|
457
|
+
# merge input labels and request info
|
458
|
+
merged_labels = {}
|
459
|
+
actual_log_name = log_name
|
460
|
+
info = request_info
|
461
|
+
if info
|
462
|
+
actual_log_name = info.log_name || actual_log_name
|
463
|
+
merged_labels["traceId"] = info.trace_id unless info.trace_id.nil?
|
464
|
+
end
|
346
465
|
merged_labels = labels.merge(merged_labels) unless labels.nil?
|
347
466
|
|
348
|
-
writer.write_entries entry, log_name:
|
467
|
+
writer.write_entries entry, log_name: actual_log_name,
|
468
|
+
resource: resource,
|
349
469
|
labels: merged_labels
|
350
470
|
end
|
351
471
|
|
@@ -13,10 +13,17 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
15
|
|
16
|
+
require "stackdriver/core"
|
17
|
+
|
16
18
|
module Google
|
17
19
|
module Cloud
|
18
20
|
module Logging
|
19
21
|
class Middleware
|
22
|
+
##
|
23
|
+
# A default value for the log_name_map argument. Directs health check
|
24
|
+
# logs to a separate log name so they don't spam the main log.
|
25
|
+
DEFAULT_LOG_NAME_MAP = { "/_ah/health" => "ruby_health_check_log" }
|
26
|
+
|
20
27
|
##
|
21
28
|
# The Google::Cloud::Logging::Logger instance
|
22
29
|
attr_reader :logger
|
@@ -29,13 +36,18 @@ module Google
|
|
29
36
|
# this middleware. The middleware will be interacting with the logger
|
30
37
|
# to track Stackdriver request trace ID. It also properly sets
|
31
38
|
# env["rack.logger"] to this assigned logger for accessing.
|
39
|
+
# @param [Hash] log_name_map A map from URI path to log name override.
|
40
|
+
# The path may be a string or regex. If a request path matches an
|
41
|
+
# entry in this map, the log name is set accordingly, otherwise the
|
42
|
+
# logger's default log_name is used.
|
32
43
|
#
|
33
44
|
# @return [Google::Cloud::Logging::Middleware] A new
|
34
45
|
# Google::Cloud::Logging::Middleware instance
|
35
46
|
#
|
36
|
-
def initialize app, logger: nil
|
47
|
+
def initialize app, logger: nil, log_name_map: DEFAULT_LOG_NAME_MAP
|
37
48
|
@app = app
|
38
49
|
@logger = logger
|
50
|
+
@log_name_map = log_name_map
|
39
51
|
end
|
40
52
|
|
41
53
|
##
|
@@ -51,25 +63,44 @@ module Google
|
|
51
63
|
#
|
52
64
|
def call env
|
53
65
|
env["rack.logger"] = logger
|
54
|
-
trace_id =
|
55
|
-
|
56
|
-
|
66
|
+
trace_id = get_trace_id env
|
67
|
+
log_name = get_log_name env
|
68
|
+
logger.add_request_info trace_id: trace_id, log_name: log_name
|
57
69
|
begin
|
58
70
|
@app.call env
|
59
71
|
ensure
|
60
|
-
logger.
|
72
|
+
logger.delete_request_info
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
64
76
|
##
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
# @
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
trace_context.
|
77
|
+
# Determine the trace ID for this request.
|
78
|
+
#
|
79
|
+
# @private
|
80
|
+
# @param [Hash] env The Rack environment.
|
81
|
+
# @return [String] The trace ID.
|
82
|
+
#
|
83
|
+
def get_trace_id env
|
84
|
+
trace_context = Stackdriver::Core::TraceContext.parse_rack_env env
|
85
|
+
trace_context.trace_id
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Determine the log name override for this request, if any.
|
90
|
+
#
|
91
|
+
# @private
|
92
|
+
# @param [Hash] env The Rack environment.
|
93
|
+
# @return [String, nil] The log name override, or `nil` if there is
|
94
|
+
# no override.
|
95
|
+
#
|
96
|
+
def get_log_name env
|
97
|
+
return nil unless @log_name_map
|
98
|
+
path = "#{env['SCRIPT_NAME']}#{env['PATH_INFO']}"
|
99
|
+
path = "/#{path}" unless path.start_with? "/"
|
100
|
+
@log_name_map.each do |k, v|
|
101
|
+
return v if k === path
|
102
|
+
end
|
103
|
+
nil
|
73
104
|
end
|
74
105
|
|
75
106
|
##
|
@@ -136,25 +167,29 @@ module Google
|
|
136
167
|
# the correct monitoring resource types and labels.
|
137
168
|
#
|
138
169
|
# @example If running from GAE, returns default resource:
|
139
|
-
# rc = Google::Cloud::Logging::Middleware.
|
170
|
+
# rc = Google::Cloud::Logging::Middleware.send \
|
171
|
+
# :default_monitored_resource
|
140
172
|
# rc.type #=> "gae_app"
|
141
173
|
# rc.labels # { module_id: [GAE module name],
|
142
174
|
# # version_id: [GAE module version] }
|
143
175
|
#
|
144
176
|
# @example If running from GKE, returns default resource:
|
145
|
-
# rc = Google::Cloud::Logging::Middleware.
|
177
|
+
# rc = Google::Cloud::Logging::Middleware.send \
|
178
|
+
# :default_monitored_resource
|
146
179
|
# rc.type #=> "container"
|
147
180
|
# rc.labels # { cluster_name: [GKE cluster name],
|
148
181
|
# # namespace_id: [GKE namespace_id] }
|
149
182
|
#
|
150
183
|
# @example If running from GCE, return default resource:
|
151
|
-
# rc = Google::Cloud::Logging::Middleware.
|
184
|
+
# rc = Google::Cloud::Logging::Middleware.send \
|
185
|
+
# :default_monitored_resource
|
152
186
|
# rc.type #=> "gce_instance"
|
153
187
|
# rc.labels # { instance_id: [GCE VM instance id],
|
154
188
|
# # zone: [GCE vm group zone] }
|
155
189
|
#
|
156
190
|
# @example Otherwise default to generic "global" type:
|
157
|
-
# rc = Google::Cloud::Logging::Middleware.
|
191
|
+
# rc = Google::Cloud::Logging::Middleware.send \
|
192
|
+
# :default_monitored_resource
|
158
193
|
# rc.type #=> "global"
|
159
194
|
# rc.labels #=> {}
|
160
195
|
#
|
@@ -103,23 +103,23 @@ module Google
|
|
103
103
|
begin
|
104
104
|
Google::Cloud::Logging::Credentials.credentials_with_scope keyfile
|
105
105
|
rescue Exception => e
|
106
|
-
warn "
|
107
|
-
"
|
106
|
+
warn "Google::Cloud::Logging is not activated due to " \
|
107
|
+
"authorization error: #{e.message}\nFalling back to default " \
|
108
|
+
"logger"
|
108
109
|
return false
|
109
110
|
end
|
110
111
|
|
111
112
|
project_id = gcp_config.logging.project_id || gcp_config.project_id ||
|
112
113
|
Google::Cloud::Logging::Project.default_project
|
113
114
|
if project_id.to_s.empty?
|
114
|
-
warn "
|
115
|
-
"project_id"
|
115
|
+
warn "Google::Cloud::Logging is not activated due to empty " \
|
116
|
+
"project_id; falling back to default logger"
|
116
117
|
return false
|
117
118
|
end
|
118
119
|
|
119
120
|
# Otherwise default to true if Rails is running in production or
|
120
|
-
# config.stackdriver.use_logging is
|
121
|
-
Rails.env.production? ||
|
122
|
-
(gcp_config.key?(:use_logging) && gcp_config.use_logging)
|
121
|
+
# config.stackdriver.use_logging is true
|
122
|
+
Rails.env.production? || gcp_config.use_logging
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.23.
|
4
|
+
version: 0.23.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Moore
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-12-
|
12
|
+
date: 2016-12-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.21.
|
20
|
+
version: 0.21.1
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.21.
|
27
|
+
version: 0.21.1
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: grpc
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - '='
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 0.0.6
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: stackdriver-core
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 0.21.0
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 0.21.0
|
98
112
|
- !ruby/object:Gem::Dependency
|
99
113
|
name: minitest
|
100
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -325,7 +339,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
325
339
|
version: '0'
|
326
340
|
requirements: []
|
327
341
|
rubyforge_project:
|
328
|
-
rubygems_version: 2.
|
342
|
+
rubygems_version: 2.6.8
|
329
343
|
signing_key:
|
330
344
|
specification_version: 4
|
331
345
|
summary: API Client library for Stackdriver Logging
|