google-cloud-logging 1.0.1 → 1.1.0
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 +4 -4
- data/lib/google/cloud/logging.rb +24 -0
- data/lib/google/cloud/logging/logger.rb +29 -5
- data/lib/google/cloud/logging/middleware.rb +52 -21
- data/lib/google/cloud/logging/rails.rb +87 -83
- data/lib/google/cloud/logging/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce60628d40d567770462e9e345948453b717dc33
|
4
|
+
data.tar.gz: 9a64aa5f9e7daf8c418186a89d7b38cd281ae78b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dbf4f38b4eafd181fe939fd1c77fe37a77ca4dd56faaab440aaa5c7161a25554f80df0a0cf2585038eeaceabec0dd7d315b3450b026634099035569673e6526
|
7
|
+
data.tar.gz: c45e64d63897784f481b6b1e61ff6486d430ed03bf3f25d1e78d48e4b19e5bc03a349f4b19f9075190921c802d9c7d3f01cd422e7ed79359c18a723998247aeb
|
data/lib/google/cloud/logging.rb
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
require "google-cloud-logging"
|
17
17
|
require "google/cloud/logging/project"
|
18
|
+
require "stackdriver/core"
|
18
19
|
|
19
20
|
module Google
|
20
21
|
module Cloud
|
@@ -328,6 +329,12 @@ module Google
|
|
328
329
|
# ```
|
329
330
|
#
|
330
331
|
module Logging
|
332
|
+
# Initialize :error_reporting as a nested Configuration under
|
333
|
+
# Google::Cloud if haven't already
|
334
|
+
unless Google::Cloud.configure.option? :logging
|
335
|
+
Google::Cloud.configure.add_options logging: :monitored_resource
|
336
|
+
end
|
337
|
+
|
331
338
|
##
|
332
339
|
# Creates a new object for connecting to the Stackdriver Logging service.
|
333
340
|
# Each call creates a new connection.
|
@@ -379,6 +386,23 @@ module Google
|
|
379
386
|
project, credentials, timeout: timeout,
|
380
387
|
client_config: client_config))
|
381
388
|
end
|
389
|
+
|
390
|
+
##
|
391
|
+
# Configure the Google::Cloud::Logging::Middleware when used in a
|
392
|
+
# Rack-based application.
|
393
|
+
#
|
394
|
+
# See the [Configuration
|
395
|
+
# Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/stackdriver/guides/instrumentation_configuration)
|
396
|
+
# for full configuration parameters.
|
397
|
+
#
|
398
|
+
# @return [Stackdriver::Core::Configuration] The configuration object
|
399
|
+
# the Google::Cloud::Logging module uses.
|
400
|
+
#
|
401
|
+
def self.configure
|
402
|
+
yield Google::Cloud.configure.logging if block_given?
|
403
|
+
|
404
|
+
Google::Cloud.configure.logging
|
405
|
+
end
|
382
406
|
end
|
383
407
|
end
|
384
408
|
end
|
@@ -82,6 +82,11 @@ module Google
|
|
82
82
|
# attribute for API compatibility with the standard Logger.
|
83
83
|
attr_accessor :datetime_format
|
84
84
|
|
85
|
+
##
|
86
|
+
# The project ID this logger is sending data to. If set, this value is
|
87
|
+
# used to set the trace field of log entries.
|
88
|
+
attr_accessor :project
|
89
|
+
|
85
90
|
##
|
86
91
|
# This logger treats progname as an alias for log_name.
|
87
92
|
def progname= name
|
@@ -146,6 +151,10 @@ module Google
|
|
146
151
|
# Unused, but present for API compatibility
|
147
152
|
@formatter = ::Logger::Formatter.new
|
148
153
|
@datetime_format = ""
|
154
|
+
|
155
|
+
# The writer is usually a Project or AsyncWriter.
|
156
|
+
logging = @writer.respond_to?(:logging) ? @writer.logging : @writer
|
157
|
+
@project = logging.project if logging.respond_to? :project
|
149
158
|
end
|
150
159
|
|
151
160
|
##
|
@@ -454,19 +463,34 @@ module Google
|
|
454
463
|
e.payload = message
|
455
464
|
end
|
456
465
|
|
457
|
-
# merge input labels and request info
|
458
|
-
merged_labels = {}
|
459
466
|
actual_log_name = log_name
|
460
467
|
info = request_info
|
461
468
|
if info
|
462
469
|
actual_log_name = info.log_name || actual_log_name
|
463
|
-
|
470
|
+
unless info.trace_id.nil? || @project.nil?
|
471
|
+
entry.trace = "projects/#{@project}/traces/#{info.trace_id}"
|
472
|
+
end
|
464
473
|
end
|
465
|
-
merged_labels = labels.merge(merged_labels) unless labels.nil?
|
466
474
|
|
467
475
|
writer.write_entries entry, log_name: actual_log_name,
|
468
476
|
resource: resource,
|
469
|
-
labels:
|
477
|
+
labels: entry_labels
|
478
|
+
end
|
479
|
+
|
480
|
+
##
|
481
|
+
# @private generate the labels hash for a log entry.
|
482
|
+
def entry_labels
|
483
|
+
merged_labels = {}
|
484
|
+
info = request_info
|
485
|
+
|
486
|
+
if info && !info.trace_id.nil?
|
487
|
+
merged_labels["traceId"] = info.trace_id
|
488
|
+
if Google::Cloud.env.app_engine?
|
489
|
+
merged_labels["appengine.googleapis.com/trace_id"] = info.trace_id
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
labels.nil? ? merged_labels : labels.merge(merged_labels)
|
470
494
|
end
|
471
495
|
|
472
496
|
##
|
@@ -42,34 +42,30 @@ module Google
|
|
42
42
|
# to track Stackdriver request trace ID. It also properly sets
|
43
43
|
# env["rack.logger"] to this assigned logger for accessing. If not
|
44
44
|
# specified, a default logger with be used.
|
45
|
-
# @param [
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
|
50
|
-
# file path the file must be readable. Used to create a default logger
|
51
|
-
# if one isn't specified and a service account is used for
|
52
|
-
# authentication. Optional.
|
53
|
-
# @param [Hash] log_name_map A map from URI path to log name override.
|
54
|
-
# The path may be a string or regex. If a request path matches an
|
55
|
-
# entry in this map, the log name is set accordingly, otherwise the
|
56
|
-
# logger's default log_name is used.
|
45
|
+
# @param [Hash] *kwargs Hash of configuration settings. Used for
|
46
|
+
# backward API compatibility. See the [Configuration
|
47
|
+
# Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/stackdriver/guides/instrumentation_configuration)
|
48
|
+
# for the prefered way to set configuration parameters.
|
57
49
|
#
|
58
50
|
# @return [Google::Cloud::Logging::Middleware] A new
|
59
51
|
# Google::Cloud::Logging::Middleware instance
|
60
52
|
#
|
61
|
-
def initialize app, logger: nil,
|
62
|
-
log_name_map: DEFAULT_LOG_NAME_MAP
|
53
|
+
def initialize app, logger: nil, **kwargs
|
63
54
|
@app = app
|
55
|
+
|
56
|
+
load_config kwargs
|
57
|
+
|
64
58
|
if logger
|
65
59
|
@logger = logger
|
66
60
|
else
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
61
|
+
log_name = configuration.log_name
|
62
|
+
logging = Logging.new project: configuration.project_id,
|
63
|
+
keyfile: configuration.keyfile
|
64
|
+
resource = Middleware.build_monitored_resource(
|
65
|
+
configuration.monitored_resource.type,
|
66
|
+
configuration.monitored_resource.labels)
|
67
|
+
@logger = logging.logger log_name, resource
|
71
68
|
end
|
72
|
-
@log_name_map = log_name_map
|
73
69
|
end
|
74
70
|
|
75
71
|
##
|
@@ -116,10 +112,11 @@ module Google
|
|
116
112
|
# no override.
|
117
113
|
#
|
118
114
|
def get_log_name env
|
119
|
-
|
115
|
+
log_name_map = configuration.log_name_map
|
116
|
+
return nil unless log_name_map
|
120
117
|
path = "#{env['SCRIPT_NAME']}#{env['PATH_INFO']}"
|
121
118
|
path = "/#{path}" unless path.start_with? "/"
|
122
|
-
|
119
|
+
log_name_map.each do |k, v|
|
123
120
|
return v if k === path
|
124
121
|
end
|
125
122
|
nil
|
@@ -249,6 +246,40 @@ module Google
|
|
249
246
|
end
|
250
247
|
|
251
248
|
private_class_method :default_monitored_resource
|
249
|
+
|
250
|
+
private
|
251
|
+
|
252
|
+
##
|
253
|
+
# Consolidate configurations from various sources. Also set
|
254
|
+
# instrumentation config parameters to default values if not set
|
255
|
+
# already.
|
256
|
+
#
|
257
|
+
def load_config **kwargs
|
258
|
+
configuration.project_id = kwargs[:project_id] ||
|
259
|
+
configuration.project_id
|
260
|
+
configuration.keyfile = kwargs[:keyfile] ||
|
261
|
+
configuration.keyfile
|
262
|
+
configuration.log_name_map ||= kwargs[:log_name_map] ||
|
263
|
+
configuration.log_name_map
|
264
|
+
|
265
|
+
init_default_config
|
266
|
+
end
|
267
|
+
|
268
|
+
##
|
269
|
+
# Fallback to default configuration values if not defined already
|
270
|
+
def init_default_config
|
271
|
+
configuration.project_id ||= Cloud.configure.project_id ||
|
272
|
+
Logging::Project.default_project
|
273
|
+
configuration.keyfile ||= Cloud.configure.keyfile
|
274
|
+
configuration.log_name ||= DEFAULT_LOG_NAME
|
275
|
+
configuration.log_name_map ||= DEFAULT_LOG_NAME_MAP
|
276
|
+
end
|
277
|
+
|
278
|
+
##
|
279
|
+
# @private Get Google::Cloud::Logging.configure
|
280
|
+
def configuration
|
281
|
+
Google::Cloud::Logging.configure
|
282
|
+
end
|
252
283
|
end
|
253
284
|
end
|
254
285
|
end
|
@@ -34,25 +34,10 @@ module Google
|
|
34
34
|
#
|
35
35
|
# When loaded, the {Google::Cloud::Logging::Middleware} will be inserted
|
36
36
|
# before the `Rails::Rack::Logger Middleware`, which allows it to set the
|
37
|
-
# `env['rack.logger']` in place of Rails's default logger.
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
# ```ruby
|
43
|
-
# config.google_cloud.logging.project_id = "my-gcp-project"
|
44
|
-
# config.google_cloud.logging.keyfile = "/path/to/secret.json"
|
45
|
-
# ```
|
46
|
-
#
|
47
|
-
# or
|
48
|
-
#
|
49
|
-
# ```ruby
|
50
|
-
# config.google_cloud.project_id = "my-gcp-project"
|
51
|
-
# config.google_cloud.keyfile = "/path/to/secret.json"
|
52
|
-
# ```
|
53
|
-
#
|
54
|
-
# If omitted, project_id will be initialized with default environment
|
55
|
-
# variables.
|
37
|
+
# `env['rack.logger']` in place of Rails's default logger.
|
38
|
+
# See the [Configuration
|
39
|
+
# Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/stackdriver/guides/instrumentation_configuration)
|
40
|
+
# on how to configure the Railtie and Middleware.
|
56
41
|
#
|
57
42
|
class Railtie < ::Rails::Railtie
|
58
43
|
config.google_cloud = ::ActiveSupport::OrderedOptions.new unless
|
@@ -64,60 +49,94 @@ module Google
|
|
64
49
|
::ActiveSupport::OrderedOptions.new
|
65
50
|
|
66
51
|
initializer "Stackdriver.Logging", before: :initialize_logger do |app|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
project_id = logging_config[:project_id]
|
71
|
-
keyfile = logging_config[:keyfile]
|
72
|
-
resource_type = logging_config[:resource_type]
|
73
|
-
resource_labels = logging_config[:resource_labels]
|
74
|
-
log_name = logging_config[:log_name]
|
75
|
-
|
76
|
-
logging = Google::Cloud::Logging.new project: project_id,
|
77
|
-
keyfile: keyfile
|
78
|
-
resource =
|
79
|
-
Logging::Middleware.build_monitored_resource resource_type,
|
80
|
-
resource_labels
|
81
|
-
|
82
|
-
app.config.logger = logging.logger log_name, resource
|
83
|
-
app.middleware.insert_before Rails::Rack::Logger,
|
84
|
-
Google::Cloud::Logging::Middleware,
|
85
|
-
logger: app.config.logger
|
86
|
-
end
|
52
|
+
self.class.consolidate_rails_config app.config
|
53
|
+
|
54
|
+
self.class.init_middleware app if Cloud.configure.use_logging
|
87
55
|
end
|
88
56
|
|
89
57
|
##
|
90
|
-
#
|
91
|
-
#
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
58
|
+
# @private Init Logging integration for Rails. Setup configuration and
|
59
|
+
# insert the Middleware.
|
60
|
+
def self.init_middleware app
|
61
|
+
project_id = Logging.configure.project_id
|
62
|
+
keyfile = Logging.configure.keyfile
|
63
|
+
resource_type = Logging.configure.monitored_resource.type
|
64
|
+
resource_labels = Logging.configure.monitored_resource.labels
|
65
|
+
log_name = Logging.configure.log_name
|
66
|
+
|
67
|
+
logging = Google::Cloud::Logging.new project: project_id,
|
68
|
+
keyfile: keyfile
|
69
|
+
resource =
|
70
|
+
Logging::Middleware.build_monitored_resource resource_type,
|
71
|
+
resource_labels
|
72
|
+
|
73
|
+
app.config.logger = logging.logger log_name, resource
|
74
|
+
app.middleware.insert_before Rails::Rack::Logger,
|
75
|
+
Google::Cloud::Logging::Middleware,
|
76
|
+
logger: app.config.logger
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# @private Consolidate Rails configuration into Logging instrumentation
|
81
|
+
# configuration. Also consolidate the `use_logging` setting by verifying
|
82
|
+
# credentials and Rails environment. The `use_logging` setting will be
|
83
|
+
# true if credentials are valid, and the setting is manually set to true
|
84
|
+
# or Rails is in production environment.
|
104
85
|
#
|
105
86
|
# @param [Rails::Railtie::Configuration] config The
|
106
|
-
#
|
107
|
-
#
|
108
|
-
# @return [Boolean] Whether to use Stackdriver Logging
|
87
|
+
# Rails.application.config
|
109
88
|
#
|
110
|
-
def self.
|
111
|
-
|
89
|
+
def self.consolidate_rails_config config
|
90
|
+
merge_rails_config config
|
112
91
|
|
113
|
-
|
114
|
-
use_logging = logging_config[:use_logging]
|
115
|
-
return false if use_logging == false
|
92
|
+
init_default_config
|
116
93
|
|
117
|
-
|
118
|
-
|
119
|
-
|
94
|
+
# Done if Google::Cloud.configure.use_logging is explicitly false
|
95
|
+
return if Google::Cloud.configure.use_logging == false
|
96
|
+
|
97
|
+
# Verify credentials and set use_error_reporting to false if
|
98
|
+
# credentials are invalid
|
99
|
+
unless valid_credentials? Logging.configure.project_id,
|
100
|
+
Logging.configure.keyfile
|
101
|
+
Cloud.configure.use_logging = false
|
102
|
+
return
|
103
|
+
end
|
120
104
|
|
105
|
+
# Otherwise set use_logging to true if Rails is running in production
|
106
|
+
Google::Cloud.configure.use_logging ||= Rails.env.production?
|
107
|
+
end
|
108
|
+
|
109
|
+
##
|
110
|
+
# @private Merge Rails configuration into Logging instrumentation
|
111
|
+
# configuration.
|
112
|
+
def self.merge_rails_config rails_config
|
113
|
+
gcp_config = rails_config.google_cloud
|
114
|
+
logging_config = gcp_config.logging
|
115
|
+
|
116
|
+
Cloud.configure.use_logging ||= gcp_config.use_logging
|
117
|
+
Logging.configure do |config|
|
118
|
+
config.project_id ||= logging_config.project_id ||
|
119
|
+
gcp_config.project_id
|
120
|
+
config.keyfile ||= logging_config.keyfile || gcp_config.keyfile
|
121
|
+
config.log_name ||= logging_config.log_name
|
122
|
+
config.log_name_map ||= logging_config.log_name_map
|
123
|
+
config.monitored_resource.type ||=
|
124
|
+
logging_config.monitored_resource.type
|
125
|
+
config.monitored_resource.labels ||=
|
126
|
+
logging_config.monitored_resource.labels.to_h
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# Fallback to default config values if config parameters not provided.
|
132
|
+
def self.init_default_config
|
133
|
+
Logging.configure.project_id ||= Logging::Project.default_project
|
134
|
+
Logging.configure.log_name ||= Middleware::DEFAULT_LOG_NAME
|
135
|
+
end
|
136
|
+
|
137
|
+
##
|
138
|
+
# @private Verify credentials
|
139
|
+
def self.valid_credentials? project_id, keyfile
|
121
140
|
# Try authenticate authorize client API. Return false if unable to
|
122
141
|
# authorize.
|
123
142
|
begin
|
@@ -136,27 +155,12 @@ module Google
|
|
136
155
|
return false
|
137
156
|
end
|
138
157
|
|
139
|
-
|
140
|
-
# config.google_cloud.use_logging is true
|
141
|
-
Rails.env.production? || use_logging
|
158
|
+
true
|
142
159
|
end
|
143
160
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
gcp_config = config.google_cloud
|
148
|
-
logging_config = gcp_config.logging
|
149
|
-
use_logging =
|
150
|
-
gcp_config.key?(:use_logging) ? gcp_config.use_logging : nil
|
151
|
-
{
|
152
|
-
project_id: logging_config.project_id || gcp_config.project_id,
|
153
|
-
keyfile: logging_config.keyfile || gcp_config.keyfile,
|
154
|
-
resource_type: logging_config.monitored_resource.type,
|
155
|
-
resource_labels: logging_config.monitored_resource.labels,
|
156
|
-
log_name: logging_config.log_name || Middleware::DEFAULT_LOG_NAME,
|
157
|
-
use_logging: use_logging
|
158
|
-
}
|
159
|
-
end
|
161
|
+
private_class_method :merge_rails_config,
|
162
|
+
:init_default_config,
|
163
|
+
:valid_credentials?
|
160
164
|
end
|
161
165
|
end
|
162
166
|
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: 1.0
|
4
|
+
version: 1.1.0
|
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: 2017-
|
12
|
+
date: 2017-05-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
34
|
+
version: '1.1'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '1.
|
41
|
+
version: '1.1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: google-gax
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -266,7 +266,7 @@ files:
|
|
266
266
|
- lib/google/logging/v2/logging_metrics_services_pb.rb
|
267
267
|
- lib/google/logging/v2/logging_pb.rb
|
268
268
|
- lib/google/logging/v2/logging_services_pb.rb
|
269
|
-
homepage:
|
269
|
+
homepage: https://github.com/GoogleCloudPlatform/google-cloud-ruby/tree/master/google-cloud-logging
|
270
270
|
licenses:
|
271
271
|
- Apache-2.0
|
272
272
|
metadata: {}
|
@@ -286,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
286
286
|
version: '0'
|
287
287
|
requirements: []
|
288
288
|
rubyforge_project:
|
289
|
-
rubygems_version: 2.6.
|
289
|
+
rubygems_version: 2.6.12
|
290
290
|
signing_key:
|
291
291
|
specification_version: 4
|
292
292
|
summary: API Client library for Stackdriver Logging
|