nexus_semantic_logger 1.0.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 +7 -0
- data/.gitlab-ci.yml +36 -0
- data/.rubocop.yml +7 -0
- data/Gemfile +9 -0
- data/README.md +3 -0
- data/lib/nexus_semantic_logger/application.rb +65 -0
- data/lib/nexus_semantic_logger/datadog_formatter.rb +38 -0
- data/lib/nexus_semantic_logger/version.rb +5 -0
- data/lib/nexus_semantic_logger.rb +6 -0
- data/nexus_semantic_logger.gemspec +19 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b4d34bf88bf2a928a063405a76a758fb9c456b98ef95648e566ac3a41020f6a1
|
4
|
+
data.tar.gz: b371208a349846331dc45b38cd64b8da000e6df7b6e05bb03de4c7820c0be504
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 194c8b3e44165a6c4006a1c972ed1b4c89b52828c960a73c2873ac05a155cf4a6f0939ceace374376fb87c99348906bf1a7103ca981b4db4caafcb2e1737b959
|
7
|
+
data.tar.gz: 8d85828bf271757d7cdf8409ec9707aabeef7fcb5fd4503835ce2b41650a2b797228a187bb3637deca84c14029e57989dfa204385495cedf8da236c11f5deb9a
|
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
image: "ruby:2.7"
|
2
|
+
|
3
|
+
stages:
|
4
|
+
- release
|
5
|
+
- test
|
6
|
+
|
7
|
+
before_script:
|
8
|
+
- gem install bundler --no-document
|
9
|
+
- bundle install --jobs $(nproc) "${FLAGS[@]}"
|
10
|
+
|
11
|
+
rspec:
|
12
|
+
script:
|
13
|
+
- bundle exec rspec
|
14
|
+
|
15
|
+
rubocop:
|
16
|
+
script:
|
17
|
+
- bundle exec rubocop
|
18
|
+
|
19
|
+
release:
|
20
|
+
stage: release
|
21
|
+
rules:
|
22
|
+
- if: '$CI_COMMIT_TAG'
|
23
|
+
script:
|
24
|
+
- mkdir -p ~/.gem
|
25
|
+
- cp $RUBYGEMS_CREDENTIALS ~/.gem/credentials
|
26
|
+
- chmod 0600 ~/.gem/credentials
|
27
|
+
- gem update --system
|
28
|
+
- ruby --version
|
29
|
+
- gem env version
|
30
|
+
- sed -i "s/0.0.0/$CI_COMMIT_TAG/g" lib/nexus_semantic_logger/version.rb
|
31
|
+
- gem build nexus_semantic_logger.gemspec
|
32
|
+
- gem push nexus_semantic_logger*.gem
|
33
|
+
artifacts:
|
34
|
+
paths:
|
35
|
+
- nexus_semantic_logger*.gem
|
36
|
+
expire_in: 30 days
|
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'semantic_logger'
|
3
|
+
|
4
|
+
module NexusSemanticLogger
|
5
|
+
class Application
|
6
|
+
include SemanticLogger::Loggable
|
7
|
+
|
8
|
+
def self.common(config, service)
|
9
|
+
# Set a safe logging level which individual environments can make more verbose if needed.
|
10
|
+
config.log_level = ENV.fetch('LOG_LEVEL', 'INFO')
|
11
|
+
|
12
|
+
# semanticlogger ddtrace correlation.
|
13
|
+
# From https://github.com/DataDog/dd-trace-rb/issues/1450
|
14
|
+
# Also https://docs.datadoghq.com/tracing/connect_logs_and_traces/ruby/
|
15
|
+
config.log_tags = {
|
16
|
+
request_id: :request_id,
|
17
|
+
dd: -> (_) {
|
18
|
+
correlation = Datadog.tracer.active_correlation
|
19
|
+
{
|
20
|
+
trace_id: correlation.trace_id.to_s,
|
21
|
+
span_id: correlation.span_id.to_s,
|
22
|
+
env: correlation.env.to_s,
|
23
|
+
service: correlation.service.to_s,
|
24
|
+
version: correlation.version.to_s,
|
25
|
+
}
|
26
|
+
},
|
27
|
+
ddsource: ["ruby"],
|
28
|
+
}
|
29
|
+
|
30
|
+
# Synchronous mode is vital when puma is in single thread mode. Must add appender AFTER setting sync.
|
31
|
+
SemanticLogger.sync!
|
32
|
+
|
33
|
+
# Default logging is stdout in datadog compatible JSON.
|
34
|
+
config.rails_semantic_logger.format = NexusSemanticLogger::DatadogFormatter.new(service)
|
35
|
+
config.rails_semantic_logger.add_file_appender = false
|
36
|
+
config.semantic_logger.add_appender(io: $stdout, formatter: config.rails_semantic_logger.format)
|
37
|
+
|
38
|
+
logger.info('SemanticLogger initialised.', level: config.log_level)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.development(config)
|
42
|
+
# Enable debug globally.
|
43
|
+
config.log_level = ENV.fetch('LOG_LEVEL', 'DEBUG')
|
44
|
+
|
45
|
+
# Change default logging to coloured logging on stdout.
|
46
|
+
config.semantic_logger.clear_appenders!
|
47
|
+
config.semantic_logger.add_appender(io: $stdout, formatter: :color)
|
48
|
+
if ENV['DD_AGENT_HOST'].present? && ENV['DD_AGENT_PORT'].present?
|
49
|
+
# Development logs can be sent to datadog via a TCP logging endpoint on a local agent.
|
50
|
+
# Each port is assigned a particular service.
|
51
|
+
# See https://logger.rocketjob.io/appenders.html
|
52
|
+
config.semantic_logger.add_appender(appender: :tcp, server: "#{ENV['DD_AGENT_HOST']}:#{ENV['DD_AGENT_PORT']}",
|
53
|
+
formatter: config.rails_semantic_logger.format)
|
54
|
+
end
|
55
|
+
|
56
|
+
logger.info('SemanticLogger initialised in development.', level: config.log_level)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.test(config)
|
60
|
+
# Use human readable coloured output for logs when running tests.
|
61
|
+
config.semantic_logger.clear_appenders!
|
62
|
+
config.semantic_logger.add_appender(io: $stdout, formatter: :color)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'semantic_logger'
|
3
|
+
|
4
|
+
module NexusSemanticLogger
|
5
|
+
# Some attributes are reserved for use by Datadog.
|
6
|
+
# https://docs.datadoghq.com/logs/log_configuration/attributes_naming_convention/#reserved-attributes
|
7
|
+
# host Supported by super.
|
8
|
+
# source Overridden by this class.
|
9
|
+
# status Supported by super as level, this class moves to status.
|
10
|
+
# date Supported by super as time, this class configures as date.
|
11
|
+
# message Supported by super.
|
12
|
+
# env Added by this class.
|
13
|
+
# service Added by this class.
|
14
|
+
class DatadogFormatter < SemanticLogger::Formatters::Raw
|
15
|
+
def initialize(service)
|
16
|
+
super(time_format: :iso_8601, time_key: :date)
|
17
|
+
@service = service
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(log, logger)
|
21
|
+
hash = super(log, logger).clone
|
22
|
+
hash[:source] = :rails
|
23
|
+
level = hash.delete(:level)
|
24
|
+
hash[:status] = level
|
25
|
+
hash[:env] = Rails.env
|
26
|
+
hash[:service] = @service
|
27
|
+
hash.delete(:application)
|
28
|
+
hash.delete(:environment)
|
29
|
+
hash.delete('')
|
30
|
+
# ddtrace correlation inserted via log_tags, but datadog expects them in the root hash.
|
31
|
+
named_tags = hash.delete(:named_tags)
|
32
|
+
if named_tags.is_a?(Hash)
|
33
|
+
hash.deep_merge!(named_tags)
|
34
|
+
end
|
35
|
+
hash.to_json
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'lib/nexus_semantic_logger/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "nexus_semantic_logger"
|
6
|
+
spec.version = NexusSemanticLogger::VERSION
|
7
|
+
spec.summary = "semantic_logger usage for nexus"
|
8
|
+
spec.authors = ["Johnathon Harris"]
|
9
|
+
spec.email = "john.harris@nexusmods.com"
|
10
|
+
# Specify which files should be added to the gem when it is released.
|
11
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
12
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
13
|
+
%x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
14
|
+
end
|
15
|
+
spec.require_paths = ['lib']
|
16
|
+
spec.add_dependency('amazing_print')
|
17
|
+
spec.add_dependency('rails_semantic_logger')
|
18
|
+
spec.add_dependency('net_tcp_client') # For TCP logging.
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nexus_semantic_logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Johnathon Harris
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-07-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: amazing_print
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails_semantic_logger
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: net_tcp_client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email: john.harris@nexusmods.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- ".gitlab-ci.yml"
|
62
|
+
- ".rubocop.yml"
|
63
|
+
- Gemfile
|
64
|
+
- README.md
|
65
|
+
- lib/nexus_semantic_logger.rb
|
66
|
+
- lib/nexus_semantic_logger/application.rb
|
67
|
+
- lib/nexus_semantic_logger/datadog_formatter.rb
|
68
|
+
- lib/nexus_semantic_logger/version.rb
|
69
|
+
- nexus_semantic_logger.gemspec
|
70
|
+
homepage:
|
71
|
+
licenses: []
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.3.17
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: semantic_logger usage for nexus
|
92
|
+
test_files: []
|