logz 1.2.1 → 1.4.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/.gitignore +1 -0
- data/README.md +1 -1
- data/lib/logz/logger_wrapper.rb +60 -0
- data/lib/logz/multi_logger.rb +39 -47
- data/lib/logz/version.rb +1 -1
- data/lib/logz.rb +20 -17
- data/logz.gemspec +13 -11
- metadata +19 -5
- data/logz-1.1.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed6eb9e9414801bd5078be1d7d80e6d01f5668863b97695134b073fbe5afcd55
|
4
|
+
data.tar.gz: dbebdcb4a1e5d8553af622b9f5a744d0bc59bf494ee9a63c5202938ad88c8219
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cf7c34ee1c00846275f6fccf2b73b95c7454a046592f22b46061df4700be2669c8fc1a7e7637c74d46c9c2e3fffe17cc25080f8106673cff2f8a35731d8dc72
|
7
|
+
data.tar.gz: ec5ae14de2b64054b34a23aa4185a2217cbb4b9510b6183099dd7d31f972e64b40f6afcd9e0156d11823e2e4313b7e5a2442b95fef4f14a69339dfeaa9c8d45d
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
module Logz
|
2
|
+
class LoggerWrapper
|
3
|
+
attr_accessor :logger
|
4
|
+
|
5
|
+
def initialize(logger)
|
6
|
+
@logger = Logger.new(logger)
|
7
|
+
reset
|
8
|
+
end
|
9
|
+
|
10
|
+
def reset
|
11
|
+
@tags = []
|
12
|
+
@color = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def color(color_name)
|
16
|
+
@color = color_name
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
# user_id: 1
|
21
|
+
def tagged(tags)
|
22
|
+
if tags.is_a?(Hash)
|
23
|
+
@tags << tags.map { |k, v| "[#{k&.upcase}=#{v}]" }.join(" ")
|
24
|
+
elsif tags.is_a?(Array)
|
25
|
+
@tags << tags.map { |v| "[#{v&.upcase}]" }.join(" ")
|
26
|
+
else
|
27
|
+
@tags << "[#{tags.to_s&.upcase}]"
|
28
|
+
end
|
29
|
+
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def has_level?(level)
|
34
|
+
Logz.config.levels.include?(level)
|
35
|
+
end
|
36
|
+
|
37
|
+
alias_method :tag, :tagged
|
38
|
+
|
39
|
+
def method_missing(m, *args, &block)
|
40
|
+
if has_level?(m)
|
41
|
+
logger.send(m, to_output(args.first))
|
42
|
+
reset
|
43
|
+
elsif logger.respond_to?(m)
|
44
|
+
logger.send(m, *args)
|
45
|
+
elsif Rainbow::X11ColorNames::NAMES.include?(m)
|
46
|
+
@color = m.to_sym
|
47
|
+
self
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def to_output(msg)
|
56
|
+
output = @tags.empty? ? msg : "#{@tags.join(" ")} #{msg}"
|
57
|
+
output = @color ? Rainbow(output).color(@color.to_sym) : output
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/logz/multi_logger.rb
CHANGED
@@ -3,46 +3,32 @@ module Logz
|
|
3
3
|
include Enumerable
|
4
4
|
attr_accessor :folder, :loggers
|
5
5
|
|
6
|
-
def initialize(folder =
|
7
|
-
@folder = set_folder(folder)
|
6
|
+
def initialize(folder = Logz.config.folder, loggers: [])
|
8
7
|
@loggers = {}
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
add(Logz.configuration.default)
|
13
|
-
Logz.configuration.loggers.each { |logger_name| add(logger_name) } if Logz.configuration.loggers.any?
|
8
|
+
@folder = set_and_create_folder(folder)
|
9
|
+
Logz.config.loggers.dup.push(*loggers).each { |name| add(name) }
|
14
10
|
end
|
15
11
|
|
16
|
-
def add(name, path =
|
17
|
-
to_stdout = Logz.configuration.output_to_stdout if to_stdout == nil
|
18
|
-
to_file = Logz.configuration.output_to_file if to_file == nil
|
19
|
-
|
20
|
-
if !name || name.blank?
|
21
|
-
return false
|
22
|
-
elsif name == STDOUT || name == 'stdout'
|
23
|
-
name = 'stdout'
|
24
|
-
to_stdout = true
|
25
|
-
to_file = false
|
26
|
-
end
|
27
|
-
|
12
|
+
def add(name, path = "", to_stdout: Logz.config.output_to_stdout, to_file: Logz.config.output_to_file)
|
28
13
|
if name.is_a?(Array)
|
29
|
-
name.each { |
|
14
|
+
name.each { |log| add(log, path, to_stdout: to_stdout, to_file: to_file) }
|
15
|
+
elsif name == STDOUT || name.to_s == "stdout"
|
16
|
+
@loggers[:stdout] = LoggerWrapper.new(STDOUT)
|
30
17
|
else
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
@loggers[name.to_sym] = Logger.new(output_stream)
|
18
|
+
output_stream = set_output_stream(name, path, to_stdout, to_file)
|
19
|
+
@loggers[name.to_sym] = LoggerWrapper.new(output_stream)
|
35
20
|
end
|
36
21
|
end
|
37
22
|
|
38
|
-
def <<(name, path =
|
39
|
-
add(name, path)
|
23
|
+
def <<(name, path = "", to_stdout: nil, to_file: nil)
|
24
|
+
add(name, path, to_stdout: to_stdout, to_file: to_file)
|
40
25
|
end
|
41
26
|
|
42
27
|
def remove(name)
|
43
28
|
@loggers[name.to_sym].close
|
44
29
|
@loggers.delete(name.to_sym)
|
45
30
|
end
|
31
|
+
|
46
32
|
alias_method :delete, :remove
|
47
33
|
|
48
34
|
def each
|
@@ -60,7 +46,7 @@ module Logz
|
|
60
46
|
end
|
61
47
|
|
62
48
|
def default_logger
|
63
|
-
loggers[
|
49
|
+
loggers[:stdout]
|
64
50
|
end
|
65
51
|
|
66
52
|
def method_missing(m, *args, &block)
|
@@ -68,48 +54,54 @@ module Logz
|
|
68
54
|
if args.empty?
|
69
55
|
loggers[m]
|
70
56
|
else
|
71
|
-
puts "Invalid method for logger '#{m}': #{args.join(
|
57
|
+
puts "Invalid method for logger '#{m}': #{args.join(", ")}"
|
72
58
|
end
|
59
|
+
elsif default_logger.has_level?(m)
|
60
|
+
default_logger.logger.send(m, *args, &block)
|
73
61
|
elsif default_logger.respond_to?(m)
|
74
|
-
default_logger.send(m, *args)
|
62
|
+
default_logger.send(m, *args, &block)
|
75
63
|
else
|
76
|
-
puts "Logger '#{m}' not found. Current loggers: #{loggers.keys.join(
|
64
|
+
puts "Logger '#{m}' not found. Current loggers: #{loggers.keys.join(", ")}"
|
77
65
|
end
|
78
66
|
end
|
79
67
|
|
80
68
|
private
|
81
69
|
|
82
|
-
def
|
83
|
-
folder
|
70
|
+
def set_and_create_folder(folder)
|
71
|
+
set_folder(folder).tap do |f|
|
72
|
+
FileUtils.mkdir_p(f) unless File.directory?(f)
|
73
|
+
end
|
74
|
+
end
|
84
75
|
|
85
|
-
|
76
|
+
def set_folder(folder)
|
77
|
+
if !folder || folder.empty? || folder == "." || folder == "./"
|
86
78
|
Dir.pwd
|
87
|
-
elsif folder.start_with?(
|
79
|
+
elsif folder.start_with?("/")
|
88
80
|
folder
|
89
81
|
else
|
90
82
|
File.join(Dir.pwd, folder)
|
91
83
|
end
|
92
84
|
end
|
93
85
|
|
94
|
-
def
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
File.join(log_folder_path, log_file_path)
|
100
|
-
end
|
86
|
+
def set_output_stream(name, path, to_stdout, to_file)
|
87
|
+
if to_file
|
88
|
+
log_path = set_log_path(name, path)
|
89
|
+
log_file = File.open(log_path, "a+")
|
101
90
|
|
102
|
-
|
103
|
-
if to_stdout && to_file
|
104
|
-
MultiIO.new(STDOUT, File.open(log_path, 'a+'))
|
91
|
+
to_stdout ? MultiIO.new(STDOUT, log_file) : log_file
|
105
92
|
elsif to_stdout
|
106
93
|
STDOUT
|
107
|
-
elsif to_file
|
108
|
-
File.open(log_path, 'a+')
|
109
94
|
else
|
110
|
-
|
95
|
+
"/dev/null"
|
111
96
|
end
|
112
97
|
end
|
113
98
|
|
99
|
+
def set_log_path(name, path)
|
100
|
+
file_extension = Logz.config.extension.to_s.strip.empty? ? "" : ".#{Logz.config.extension}"
|
101
|
+
log_folder_path = path.start_with?("/") ? path : File.join(folder, path)
|
102
|
+
log_file_path = "/#{Logz.config.prefix}#{name}#{Logz.config.suffix}#{file_extension}"
|
103
|
+
|
104
|
+
File.join(log_folder_path, log_file_path)
|
105
|
+
end
|
114
106
|
end
|
115
107
|
end
|
data/lib/logz/version.rb
CHANGED
data/lib/logz.rb
CHANGED
@@ -1,36 +1,39 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "logger"
|
2
|
+
require "fileutils"
|
3
|
+
require "logz/version"
|
4
|
+
require "logz/multi_io"
|
5
|
+
require "logz/multi_logger"
|
6
|
+
require "logz/logger_wrapper"
|
7
|
+
require "rainbow"
|
5
8
|
|
6
9
|
module Logz
|
7
|
-
class
|
10
|
+
class Config
|
8
11
|
attr_accessor :folder, :output_to_stdout, :output_to_file,
|
9
|
-
:
|
12
|
+
:suffix, :prefix, :loggers, :extension, :levels
|
10
13
|
|
11
14
|
def initialize
|
12
15
|
@output_to_stdout = true
|
13
16
|
@output_to_file = true
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
17
|
+
@folder = "log"
|
18
|
+
@extension = "log"
|
19
|
+
@loggers = [:stdout]
|
20
|
+
@suffix = ""
|
21
|
+
@prefix = ""
|
22
|
+
@levels = %i(debug info warn error fatal unknown)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
23
26
|
class << self
|
24
|
-
attr_accessor :
|
27
|
+
attr_accessor :config
|
25
28
|
end
|
26
29
|
|
27
30
|
def self.new(*params)
|
28
31
|
configure
|
29
32
|
MultiLogger.new(*params)
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
def self.configure
|
33
|
-
self.
|
34
|
-
yield(
|
36
|
+
self.config ||= Config.new
|
37
|
+
yield(config) if block_given?
|
35
38
|
end
|
36
|
-
end
|
39
|
+
end
|
data/logz.gemspec
CHANGED
@@ -3,24 +3,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
require "logz/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
10
|
-
spec.licenses
|
11
|
-
spec.summary
|
12
|
-
spec.description
|
13
|
-
spec.homepage
|
6
|
+
spec.name = "logz"
|
7
|
+
spec.version = Logz::VERSION
|
8
|
+
spec.authors = ["Ivan Tumanov"]
|
9
|
+
spec.email = ["vizakenjack@gmail.com"]
|
10
|
+
spec.licenses = ["MIT"]
|
11
|
+
spec.summary = %q{Simple and lightweight logger tool}
|
12
|
+
spec.description = %q{Output to STDOUT and log file at the same time. Support for multiple log files.}
|
13
|
+
spec.homepage = "https://github.com/v1z4/logz"
|
14
14
|
|
15
15
|
# Specify which files should be added to the gem when it is released.
|
16
16
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
17
|
-
spec.files
|
17
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
18
18
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
19
|
end
|
20
|
-
spec.bindir
|
21
|
-
spec.executables
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
+
spec.add_runtime_dependency "rainbow", "~> 3.0"
|
25
|
+
|
24
26
|
spec.add_development_dependency "bundler", "~> 1.16"
|
25
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
28
|
spec.add_development_dependency "rspec", "~> 3.0"
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Tumanov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rainbow
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,12 +82,12 @@ files:
|
|
68
82
|
- README.md
|
69
83
|
- Rakefile
|
70
84
|
- lib/logz.rb
|
85
|
+
- lib/logz/logger_wrapper.rb
|
71
86
|
- lib/logz/multi_io.rb
|
72
87
|
- lib/logz/multi_logger.rb
|
73
88
|
- lib/logz/version.rb
|
74
|
-
- logz-1.1.0.gem
|
75
89
|
- logz.gemspec
|
76
|
-
homepage: https://github.com/
|
90
|
+
homepage: https://github.com/v1z4/logz
|
77
91
|
licenses:
|
78
92
|
- MIT
|
79
93
|
metadata: {}
|
@@ -92,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
106
|
- !ruby/object:Gem::Version
|
93
107
|
version: '0'
|
94
108
|
requirements: []
|
95
|
-
rubygems_version: 3.
|
109
|
+
rubygems_version: 3.1.2
|
96
110
|
signing_key:
|
97
111
|
specification_version: 4
|
98
112
|
summary: Simple and lightweight logger tool
|
data/logz-1.1.0.gem
DELETED
Binary file
|