tty-logger 0.0.0 → 0.5.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/CHANGELOG.md +51 -1
- data/README.md +769 -4
- data/lib/tty/logger.rb +332 -0
- data/lib/tty/logger/config.rb +128 -0
- data/lib/tty/logger/data_filter.rb +118 -0
- data/lib/tty/logger/event.rb +40 -0
- data/lib/tty/logger/formatters/json.rb +63 -0
- data/lib/tty/logger/formatters/text.rb +130 -0
- data/lib/tty/logger/handlers/base.rb +73 -0
- data/lib/tty/logger/handlers/console.rb +178 -0
- data/lib/tty/logger/handlers/null.rb +16 -0
- data/lib/tty/logger/handlers/stream.rb +63 -0
- data/lib/tty/logger/levels.rb +68 -0
- data/lib/tty/logger/version.rb +3 -3
- metadata +28 -22
- data/Rakefile +0 -8
- data/spec/spec_helper.rb +0 -14
- data/spec/unit/log_spec.rb +0 -7
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
- data/tty-logger.gemspec +0 -33
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module TTY
|
6
|
+
class Logger
|
7
|
+
module Handlers
|
8
|
+
class Stream
|
9
|
+
include Base
|
10
|
+
|
11
|
+
attr_reader :output
|
12
|
+
|
13
|
+
attr_reader :config
|
14
|
+
|
15
|
+
attr_reader :level
|
16
|
+
|
17
|
+
def initialize(output: $stderr, formatter: nil, config: nil, level: nil)
|
18
|
+
@output = Array[output].flatten
|
19
|
+
@formatter = coerce_formatter(formatter || config.formatter).new
|
20
|
+
@config = config
|
21
|
+
@level = level || @config.level
|
22
|
+
@mutex = Mutex.new
|
23
|
+
end
|
24
|
+
|
25
|
+
# @api public
|
26
|
+
def call(event)
|
27
|
+
@mutex.lock
|
28
|
+
|
29
|
+
data = {}
|
30
|
+
metadata.each do |meta|
|
31
|
+
case meta
|
32
|
+
when :date
|
33
|
+
data["date"] = event.metadata[:time].strftime(config.date_format)
|
34
|
+
when :time
|
35
|
+
data["time"] = event.metadata[:time].strftime(config.time_format)
|
36
|
+
when :file
|
37
|
+
data["path"] = format_filepath(event)
|
38
|
+
when :pid
|
39
|
+
data["pid"] = event.metadata[:pid]
|
40
|
+
else
|
41
|
+
raise "Unknown metadata `#{meta}`"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
data["level"] = event.metadata[:level]
|
45
|
+
data["message"] = event.message.join(' ')
|
46
|
+
unless event.fields.empty?
|
47
|
+
data.merge!(event.fields)
|
48
|
+
end
|
49
|
+
unless event.backtrace.empty?
|
50
|
+
data.merge!("backtrace" => event.backtrace.join(","))
|
51
|
+
end
|
52
|
+
|
53
|
+
output.each do |out|
|
54
|
+
out.puts @formatter.dump(data, max_bytes: config.max_bytes,
|
55
|
+
max_depth: config.max_depth)
|
56
|
+
end
|
57
|
+
ensure
|
58
|
+
@mutex.unlock
|
59
|
+
end
|
60
|
+
end # Stream
|
61
|
+
end # Handlers
|
62
|
+
end # Logger
|
63
|
+
end # TTY
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TTY
|
4
|
+
class Logger
|
5
|
+
module Levels
|
6
|
+
DEBUG_LEVEL = 0
|
7
|
+
INFO_LEVEL = 1
|
8
|
+
WARN_LEVEL = 2
|
9
|
+
ERROR_LEVEL = 3
|
10
|
+
FATAL_LEVEL = 4
|
11
|
+
|
12
|
+
LEVEL_NAMES = {
|
13
|
+
debug: DEBUG_LEVEL,
|
14
|
+
info: INFO_LEVEL,
|
15
|
+
warn: WARN_LEVEL,
|
16
|
+
error: ERROR_LEVEL,
|
17
|
+
fatal: FATAL_LEVEL
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
# All the default level names
|
21
|
+
#
|
22
|
+
# @return [Array[Symbol]]
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
def level_names
|
26
|
+
LEVEL_NAMES.keys
|
27
|
+
end
|
28
|
+
|
29
|
+
# Convert level name to level number
|
30
|
+
#
|
31
|
+
# @param [Symbol] level
|
32
|
+
#
|
33
|
+
# @return [Integer]
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
def level_to_number(level)
|
37
|
+
LEVEL_NAMES[level.to_s.downcase.to_sym] ||
|
38
|
+
raise(ArgumentError, "Invalid level #{level.inspect}")
|
39
|
+
end
|
40
|
+
|
41
|
+
# Convert level number to level name
|
42
|
+
#
|
43
|
+
# @param [Integer] number
|
44
|
+
#
|
45
|
+
# @return [Symbol]
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
def number_to_level(number)
|
49
|
+
LEVEL_NAMES.key(number)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Compares two levels by name or number
|
53
|
+
#
|
54
|
+
# @return [Symbol]
|
55
|
+
# either :lt, :gt or :eq
|
56
|
+
#
|
57
|
+
# @api private
|
58
|
+
def compare_levels(left, right)
|
59
|
+
left = left.is_a?(Integer) ? left : level_to_number(left)
|
60
|
+
right = right.is_a?(Integer) ? right : level_to_number(right)
|
61
|
+
|
62
|
+
return :eq if left == right
|
63
|
+
|
64
|
+
left < right ? :lt : :gt
|
65
|
+
end
|
66
|
+
end # Levels
|
67
|
+
end # Logger
|
68
|
+
end # TTY
|
data/lib/tty/logger/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tty-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: pastel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0.8'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0.8'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,37 +42,43 @@ dependencies:
|
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
description: Readable, structured and beautiful terminal logging
|
56
56
|
email:
|
57
|
-
-
|
57
|
+
- piotr@piotrmurach.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
60
|
-
extra_rdoc_files:
|
60
|
+
extra_rdoc_files:
|
61
|
+
- README.md
|
62
|
+
- CHANGELOG.md
|
63
|
+
- LICENSE.txt
|
61
64
|
files:
|
62
65
|
- CHANGELOG.md
|
63
66
|
- LICENSE.txt
|
64
67
|
- README.md
|
65
|
-
- Rakefile
|
66
68
|
- lib/tty-logger.rb
|
67
69
|
- lib/tty/logger.rb
|
70
|
+
- lib/tty/logger/config.rb
|
71
|
+
- lib/tty/logger/data_filter.rb
|
72
|
+
- lib/tty/logger/event.rb
|
73
|
+
- lib/tty/logger/formatters/json.rb
|
74
|
+
- lib/tty/logger/formatters/text.rb
|
75
|
+
- lib/tty/logger/handlers/base.rb
|
76
|
+
- lib/tty/logger/handlers/console.rb
|
77
|
+
- lib/tty/logger/handlers/null.rb
|
78
|
+
- lib/tty/logger/handlers/stream.rb
|
79
|
+
- lib/tty/logger/levels.rb
|
68
80
|
- lib/tty/logger/version.rb
|
69
|
-
|
70
|
-
- spec/unit/log_spec.rb
|
71
|
-
- tasks/console.rake
|
72
|
-
- tasks/coverage.rake
|
73
|
-
- tasks/spec.rake
|
74
|
-
- tty-logger.gemspec
|
75
|
-
homepage: https://piotrmurach.github.io/tty
|
81
|
+
homepage: https://ttytoolkit.org
|
76
82
|
licenses:
|
77
83
|
- MIT
|
78
84
|
metadata:
|
@@ -80,7 +86,7 @@ metadata:
|
|
80
86
|
bug_tracker_uri: https://github.com/piotrmurach/tty-logger/issues
|
81
87
|
changelog_uri: https://github.com/piotrmurach/tty-logger/blob/master/CHANGELOG.md
|
82
88
|
documentation_uri: https://www.rubydoc.info/gems/tty-logger
|
83
|
-
homepage_uri: https://
|
89
|
+
homepage_uri: https://ttytoolkit.org
|
84
90
|
source_code_uri: https://github.com/piotrmurach/tty-logger
|
85
91
|
post_install_message:
|
86
92
|
rdoc_options: []
|
@@ -97,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
103
|
- !ruby/object:Gem::Version
|
98
104
|
version: '0'
|
99
105
|
requirements: []
|
100
|
-
rubygems_version: 3.
|
106
|
+
rubygems_version: 3.1.2
|
101
107
|
signing_key:
|
102
108
|
specification_version: 4
|
103
109
|
summary: Readable, structured and beautiful terminal logging
|
data/Rakefile
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require "bundler/setup"
|
2
|
-
require "tty-logger"
|
3
|
-
|
4
|
-
RSpec.configure do |config|
|
5
|
-
# Enable flags like --only-failures and --next-failure
|
6
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
7
|
-
|
8
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
9
|
-
config.disable_monkey_patching!
|
10
|
-
|
11
|
-
config.expect_with :rspec do |c|
|
12
|
-
c.syntax = :expect
|
13
|
-
end
|
14
|
-
end
|
data/spec/unit/log_spec.rb
DELETED
data/tasks/console.rake
DELETED
data/tasks/coverage.rake
DELETED
data/tasks/spec.rake
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
desc 'Run all specs'
|
7
|
-
RSpec::Core::RakeTask.new(:spec) do |task|
|
8
|
-
task.pattern = 'spec/{unit,integration}{,/*/**}/*_spec.rb'
|
9
|
-
end
|
10
|
-
|
11
|
-
namespace :spec do
|
12
|
-
desc 'Run unit specs'
|
13
|
-
RSpec::Core::RakeTask.new(:unit) do |task|
|
14
|
-
task.pattern = 'spec/unit{,/*/**}/*_spec.rb'
|
15
|
-
end
|
16
|
-
|
17
|
-
desc 'Run integration specs'
|
18
|
-
RSpec::Core::RakeTask.new(:integration) do |task|
|
19
|
-
task.pattern = 'spec/integration{,/*/**}/*_spec.rb'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
rescue LoadError
|
24
|
-
%w[spec spec:unit spec:integration].each do |name|
|
25
|
-
task name do
|
26
|
-
$stderr.puts "In order to run #{name}, do `gem install rspec`"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/tty-logger.gemspec
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
lib = File.expand_path("lib", __dir__)
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require "tty/logger/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = "tty-logger"
|
7
|
-
spec.version = TTY::Logger::VERSION
|
8
|
-
spec.authors = ["Piotr Murach"]
|
9
|
-
spec.email = ["me@piotrmurach.com"]
|
10
|
-
spec.summary = %q{Readable, structured and beautiful terminal logging}
|
11
|
-
spec.description = %q{Readable, structured and beautiful terminal logging}
|
12
|
-
spec.homepage = "https://piotrmurach.github.io/tty"
|
13
|
-
spec.license = "MIT"
|
14
|
-
|
15
|
-
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
-
spec.metadata["bug_tracker_uri"] = "https://github.com/piotrmurach/tty-logger/issues"
|
17
|
-
spec.metadata["changelog_uri"] = "https://github.com/piotrmurach/tty-logger/blob/master/CHANGELOG.md"
|
18
|
-
spec.metadata["documentation_uri"] = "https://www.rubydoc.info/gems/tty-logger"
|
19
|
-
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
-
spec.metadata["source_code_uri"] = "https://github.com/piotrmurach/tty-logger"
|
21
|
-
|
22
|
-
spec.files = Dir['{lib,spec,examples}/**/*.rb']
|
23
|
-
spec.files += Dir['tasks/*', 'tty-logger.gemspec']
|
24
|
-
spec.files += Dir['README.md', 'CHANGELOG.md', 'LICENSE.txt', 'Rakefile']
|
25
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
|
-
spec.require_paths = ["lib"]
|
27
|
-
|
28
|
-
spec.required_ruby_version = '>= 2.0.0'
|
29
|
-
|
30
|
-
spec.add_development_dependency "bundler", ">= 1.5"
|
31
|
-
spec.add_development_dependency "rake"
|
32
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
33
|
-
end
|