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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7398c68219adac50a2a7b95f4adb156b62447465ff8d9c01a02491d4c1cc940d
4
- data.tar.gz: 6f88d5bb98b1b97280332194c85f2e25fbe9cdf393da4216822dd4c3de453a69
3
+ metadata.gz: ed6eb9e9414801bd5078be1d7d80e6d01f5668863b97695134b073fbe5afcd55
4
+ data.tar.gz: dbebdcb4a1e5d8553af622b9f5a744d0bc59bf494ee9a63c5202938ad88c8219
5
5
  SHA512:
6
- metadata.gz: 6ad4d67f314dd164a3971b396d62fe793169a67152ff41282ab1f35f17dbf132b18edad676cd68a03db41c108ed017ca9062e5b6a4ff6d39c7d6628659cfd72d
7
- data.tar.gz: 3ebfad24973360068c317b9178343fca0ee43213337ffbf2cf305ac29e11bf58fadeaec5cf9e959c61f332b7befe0e251cacec2e073e0bae99c295d27781b6e8
6
+ metadata.gz: 2cf7c34ee1c00846275f6fccf2b73b95c7454a046592f22b46061df4700be2669c8fc1a7e7637c74d46c9c2e3fffe17cc25080f8106673cff2f8a35731d8dc72
7
+ data.tar.gz: ec5ae14de2b64054b34a23aa4185a2217cbb4b9510b6183099dd7d31f972e64b40f6afcd9e0156d11823e2e4313b7e5a2442b95fef4f14a69339dfeaa9c8d45d
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /log/
10
+ *.gem
10
11
 
11
12
  # rspec failure tracking
12
13
  .rspec_status
data/README.md CHANGED
@@ -125,7 +125,7 @@ end
125
125
 
126
126
  Set up custom formatter for all logs:
127
127
  ```
128
- logger.each do |l|
128
+ logz.each do |l|
129
129
  l.formatter = proc do |severity, datetime, progname, msg|
130
130
  "[#{datetime}] [#{severity}] #{msg}\n"
131
131
  end
@@ -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
@@ -3,46 +3,32 @@ module Logz
3
3
  include Enumerable
4
4
  attr_accessor :folder, :loggers
5
5
 
6
- def initialize(folder = nil)
7
- @folder = set_folder(folder)
6
+ def initialize(folder = Logz.config.folder, loggers: [])
8
7
  @loggers = {}
9
-
10
- FileUtils.mkdir_p(@folder) unless File.directory?(@folder)
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 = '', to_stdout: nil, to_file: nil)
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 { |n| add(n, path, to_stdout: to_stdout, to_file: to_file) }
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
- log_path = set_log_path(path, name)
32
- output_stream = set_output_stream(log_path, to_stdout, to_file)
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[Logz.configuration.default&.to_sym]
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 set_folder(folder)
83
- folder ||= Logz.configuration.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
- if !folder || folder.empty? || folder == '.' || folder == './'
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 set_log_path(path, name)
95
- file_extension = Logz.configuration.extension.to_s.strip.empty? ? '' : ".#{Logz.configuration.extension}"
96
- log_folder_path = path.start_with?('/') ? path : File.join(folder, path)
97
- log_file_path = "/#{Logz.configuration.prefix}#{name}#{Logz.configuration.suffix}#{file_extension}"
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
- def set_output_stream(log_path, to_stdout, to_file)
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
- '/dev/null'
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
@@ -1,3 +1,3 @@
1
1
  module Logz
2
- VERSION = "1.2.1"
2
+ VERSION = "1.4.0"
3
3
  end
data/lib/logz.rb CHANGED
@@ -1,36 +1,39 @@
1
- require 'logger'
2
- require 'logz/version'
3
- require 'logz/multi_io'
4
- require 'logz/multi_logger'
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 Configuration
10
+ class Config
8
11
  attr_accessor :folder, :output_to_stdout, :output_to_file,
9
- :default, :suffix, :prefix, :loggers, :extension
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
- @default = 'stdout'
15
- @folder = 'log'
16
- @extension = 'log'
17
- @loggers = []
18
- @suffix = ''
19
- @prefix = ''
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 :configuration
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.configuration ||= Configuration.new
34
- yield(configuration) if block_given?
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 = "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/vizakenjack/logz"
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 = Dir.chdir(File.expand_path('..', __FILE__)) do
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 = "exe"
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
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.2.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: 2019-06-21 00:00:00.000000000 Z
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/vizakenjack/logz
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.0.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