vidazing_logger 0.1.0 → 0.2.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.
@@ -1,59 +1,21 @@
1
- require 'logging'
2
-
3
- # Determines how to log messages. Attaches to Logging.logger
4
- # @api private
5
- module VidazingLogger::Appenders
6
- # Appender writing to STDERR and 'logs/error.log'
7
- # @api private
8
- module Stderr
9
- class << self
10
- private
11
-
12
- # ----- BUILD STDERR + LOG -----
13
-
14
- # Logging holds the color scheme reference
15
- ERROR_LOG_COLOR_SCHEME = "bright_error"
16
- Logging.color_scheme(
17
- ERROR_LOG_COLOR_SCHEME,
18
- :levels => {
19
- :info => :green,
20
- :warn => :yellow,
21
- :error => :red,
22
- :fatal => [:white, :on_red]
23
- },
24
- :date => :red,
25
- :logger => :cyan,
26
- :message => :magenta
27
- )
28
-
29
- def readable_error_layout_pattern
30
- Logging.layouts.pattern \
31
- :pattern => '[%d] %-5l %c: %m\n',
32
- # ISO8601 without the 'T'
33
- :date_pattern => '%Y-%m-%d %H:%M:%S',
34
- :color_scheme => ERROR_LOG_COLOR_SCHEME
35
- end
36
-
37
- APPENDER_STDERR = "STDERR"
38
- def stderr_appender
39
- Logging.appenders.stderr \
40
- APPENDER_STDERR,
41
- :layout => readable_error_layout_pattern,
42
- :level => :error
43
- end
44
-
45
- def error_log_appender(log_dir)
46
- error_log_path = "#{log_dir}/error.log"
47
-
48
- appender_error_log = error_log_path
49
- Logging.appenders.rolling_file \
50
- appender_error_log,
51
- :layout => readable_error_layout_pattern,
52
- :age => 'daily',
53
- :keep => 7,
54
- :level => :error
55
-
56
- Logging.appenders[appender_error_log]
1
+ # frozen_string_literal: true
2
+
3
+ require 'vidazing_logger/appender'
4
+ require 'vidazing_logger/color_scheme'
5
+ require 'vidazing_logger/filters/levels'
6
+
7
+ module VidazingLogger
8
+ module Appenders
9
+ # Appender writing to STDERR
10
+ #
11
+ # @api private
12
+ # @since 0.1.0
13
+ class Stderr < Appender
14
+ def initialize
15
+ super \
16
+ name: self.class.name,
17
+ color_scheme: ColorScheme.error,
18
+ filter_levels: Filters::Levels.error
57
19
  end
58
20
  end
59
21
  end
@@ -1,66 +1,21 @@
1
- require 'logging'
2
-
3
- module VidazingLogger::Appenders
4
- # Appender writing to STDOUT and 'logs/build.log'
5
- # @api private
6
- module Stdout
7
- class << self
8
- private
9
-
10
- #----- BUILD STDOUT + LOG -----
11
-
12
- # Logging holds the color scheme reference
13
- LOG_COLOR_SCHEME = "bright"
14
- Logging.color_scheme(
15
- LOG_COLOR_SCHEME,
16
- :levels => {
17
- :info => :green,
18
- :warn => :yellow,
19
- :error => :red,
20
- :fatal => [:white, :on_red]
21
- },
22
- :date => :blue,
23
- :logger => :cyan,
24
- :message => :magenta
25
- )
26
-
27
- def readable_layout_pattern
28
- Logging.layouts.pattern \
29
- :pattern => '[%d] %-5l %c: %m\n',
30
- # ISO8601 without the 'T'
31
- :date_pattern => '%Y-%m-%d %H:%M:%S',
32
- :color_scheme => LOG_COLOR_SCHEME
33
- end
34
-
35
- def stdout_levels
36
- Logging::Filters::Level.new \
37
- :debug,
38
- :info,
39
- :warn
40
- end
41
-
42
- APPENDER_STDOUT = "STDOUT"
43
- def stdout_appender
44
- Logging.appenders.stdout \
45
- APPENDER_STDOUT,
46
- :layout => readable_layout_pattern,
47
- :filters => stdout_levels
48
-
49
- Logging.appenders[APPENDER_STDOUT]
50
- end
51
-
52
- def build_log_appender(log_dir)
53
- build_log_path = "#{log_dir}/build.log"
54
-
55
- appender_build_log = build_log_path
56
- Logging.appenders.rolling_file \
57
- appender_build_log,
58
- :layout => readable_layout_pattern,
59
- :age => 'daily',
60
- :keep => 7,
61
- :filters => stdout_levels
62
-
63
- Logging.appenders[appender_build_log]
1
+ # frozen_string_literal: true
2
+
3
+ require 'vidazing_logger/appender'
4
+ require 'vidazing_logger/color_scheme'
5
+ require 'vidazing_logger/filters/levels'
6
+
7
+ module VidazingLogger
8
+ module Appenders
9
+ # Appender writing to STDOUT
10
+ #
11
+ # @api private
12
+ # @since 0.1.0
13
+ class Stdout < Appender
14
+ def initialize
15
+ super \
16
+ name: self.class.name,
17
+ color_scheme: ColorScheme.normal,
18
+ filter_levels: Filters::Levels.normal
64
19
  end
65
20
  end
66
21
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VidazingLogger
4
+ # Set logging colors
5
+ #
6
+ # @api private
7
+ # @since 0.2.0
8
+ class ColorScheme
9
+ attr_reader :name, :scheme
10
+
11
+ def initialize(name:, date_color:)
12
+ @name = name
13
+
14
+ @scheme = ColorScheme.basic.dup
15
+ @scheme[:date] = date_color
16
+ end
17
+
18
+ class << self
19
+ def normal
20
+ ColorScheme.new(name: :normal, date_color: :blue)
21
+ end
22
+
23
+ def error
24
+ ColorScheme.new(name: :error, date_color: :red)
25
+ end
26
+
27
+ def basic
28
+ {
29
+ levels: {
30
+ info: :green,
31
+ warn: :yellow,
32
+ error: :red,
33
+ fatal: %i[white on_red]
34
+ },
35
+ logger: :cyan,
36
+ message: :magenta
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logging'
4
+
5
+ module VidazingLogger
6
+ # Filter logs by level severity
7
+ #
8
+ # @api private
9
+ # @since 0.2.0
10
+ module Filters
11
+ # Filter log messages strictly by Levels. Levels...
12
+ #
13
+ # @see Levels::ALL
14
+ # @api private
15
+ # @since 0.2.0
16
+ module Levels
17
+ class << self
18
+ ALL = %i[debug info warn error fatal].freeze
19
+
20
+ # Filter for normal messages
21
+ def normal
22
+ %i[debug info warn]
23
+ end
24
+
25
+ # Filter for error messages
26
+ def error
27
+ %i[error fatal]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VidazingLogger
4
+ # Determines the format for the logger messages
5
+ #
6
+ # @api private
7
+ # @since 0.2.0
8
+ class LayoutPattern
9
+ attr_reader :layout
10
+
11
+ def initialize(color_scheme_name)
12
+ @layout = LayoutPattern.basic.dup
13
+ @layout[:color_scheme] = color_scheme_name
14
+ end
15
+
16
+ class << self
17
+ def colored(color_scheme_name)
18
+ LayoutPattern.new(color_scheme_name)
19
+ end
20
+
21
+ def basic
22
+ {
23
+ pattern: '[%d] %-5l %c: %m\n',
24
+ # ISO8601 without the 'T'
25
+ date_pattern: '%Y-%m-%d %H:%M:%S'
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vidazing_logger/logger_builder'
4
+
5
+ module VidazingLogger
6
+ # Core +Logger+ class api. Calling +build+ returns a
7
+ # logger with 4 +Appender+s attached.
8
+ #
9
+ # @since 0.2.0
10
+ class Logger
11
+ # Where to write logs to
12
+ #
13
+ # @return [String] where to write logs to
14
+ attr_reader :log_dir
15
+
16
+ # Use in Logging.logger
17
+ #
18
+ # @return [String] name
19
+ attr_reader :name
20
+
21
+ # Creates the 'logs/' directory
22
+ #
23
+ # @param name [String] Logger name used in messages
24
+ # @param log_dir [String] Directory to write logs in
25
+ def initialize(log_dir = VidazingLogger::LOG_DIR, name:)
26
+ @name = name
27
+ @log_dir = log_dir
28
+
29
+ create_log_dir
30
+ end
31
+
32
+ # Deletes the +log_dir+ directory
33
+ def clean
34
+ FileUtils.remove_dir(@log_dir, true)
35
+ end
36
+
37
+ # Create a Logger with 4 Appenders.
38
+ # STDERR + 'logs/error.log'
39
+ # STDOUT + 'logs/build.log'
40
+ #
41
+ # @return [Logging.logger] See https://github.com/TwP/logging/blob/master/lib/logging/logger.rb
42
+ def build
43
+ LoggerBuilder.build(name: @name) do |builder|
44
+ builder
45
+ .add_stdout
46
+ .add_build_log(log_dir: @log_dir)
47
+ .add_stderr
48
+ .add_error_log(log_dir: @log_dir)
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def create_log_dir
55
+ Dir.mkdir(@log_dir) unless Dir.exist?(@log_dir)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vidazing_logger/appenders/logging_gem_adapter'
4
+
5
+ require 'vidazing_logger/appenders/stdout'
6
+ require 'vidazing_logger/appenders/build_log'
7
+ require 'vidazing_logger/appenders/stderr'
8
+ require 'vidazing_logger/appenders/error_log'
9
+
10
+ require 'logging'
11
+
12
+ module VidazingLogger
13
+ # Select where the logger will write to
14
+ #
15
+ # @example Building a Logger
16
+ # LoggerBuilder.build(name: @name) do |builder|
17
+ # builder
18
+ # .add_stdout
19
+ # .add_build_log(log_dir: @log_dir)
20
+ # .add_stderr
21
+ # .add_error_log(log_dir: @log_dir)
22
+ #
23
+ # @see Logging.logger
24
+ # @since 0.2.0
25
+ class LoggerBuilder
26
+ # The resulting builder logger object
27
+ #
28
+ # @return [Logging.logger]
29
+ attr_reader :logger
30
+
31
+ # Create a new LoggerBuilder
32
+ #
33
+ # @param name [String] Reference to obtain the logger.
34
+ # @return [Logging.logger]
35
+ def self.build(name:)
36
+ builder = new(name: name)
37
+ yield(builder)
38
+ builder.logger
39
+ end
40
+
41
+ # Sets up the underlying Logging.logger reference.
42
+ #
43
+ # @param name [String] Reference to obtain the logger.
44
+ def initialize(name:)
45
+ # Create a logger before any appenders
46
+ # Avoids a situation where Filters::Normal levels are nil
47
+ #
48
+ # Logging::Filters::Level.new bug:
49
+ # @filter has nil levels set on the first invocation
50
+ @logger = Logging.logger[name]
51
+ end
52
+
53
+ # Outputs log messages to STDOUT
54
+ #
55
+ # @return nil
56
+ def add_stdout
57
+ appender = Appenders::Stdout.new
58
+ logging_appender_type = Appenders::Type::ID_STDOUT
59
+
60
+ add_logging_appender(logging_appender_type, vidazing_appender: appender)
61
+ end
62
+
63
+ # Outputs log messages to STDERR
64
+ #
65
+ # @return nil
66
+ def add_stderr
67
+ appender = Appenders::Stderr.new
68
+ logging_appender_type = Appenders::Type::ID_STDERR
69
+
70
+ add_logging_appender(logging_appender_type, vidazing_appender: appender)
71
+ end
72
+
73
+ # Adds a VidazingLogger::Appender::BuildLog.
74
+ # Writes to +log_dir+/build.log
75
+ #
76
+ # @param log_dir [String] Directory to write logs in
77
+ # @return nil
78
+ def add_build_log(log_dir:)
79
+ appender = Appenders::BuildLog.new(log_dir: log_dir)
80
+ add_log(vidazing_appender: appender)
81
+ end
82
+
83
+ # Adds a VidazingLogger::Appender::ErrorLog
84
+ # Writes to +log_dir+/error.log
85
+ #
86
+ # @param log_dir [String] Directory to write logs in
87
+ # @return nil
88
+ def add_error_log(log_dir:)
89
+ appender = Appenders::ErrorLog.new(log_dir: log_dir)
90
+ add_log(vidazing_appender: appender)
91
+ end
92
+
93
+ private
94
+
95
+ def add_log(vidazing_appender:)
96
+ logging_appender_type = Appenders::Type::ID_ROLLING_FILE
97
+
98
+ add_logging_appender \
99
+ logging_appender_type,
100
+ vidazing_appender: vidazing_appender
101
+ end
102
+
103
+ def add_logging_appender(logging_appender_type, vidazing_appender:)
104
+ # Using public_send since ruby methods are not first class
105
+ adapter = Appenders::LoggingGemAdapter.public_send \
106
+ logging_appender_type,
107
+ vidazing_appender: vidazing_appender
108
+
109
+ logging_appender = adapter.logging_appender
110
+ @logger.add_appenders(logging_appender)
111
+
112
+ self
113
+ end
114
+ end
115
+ end
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @since 0.1.0
1
4
  module VidazingLogger
2
5
  # [String]
3
- VERSION = '0.1.0'
6
+ VERSION = '0.2.0'
4
7
  end
@@ -1,8 +1,6 @@
1
- require 'vidazing_logger/version'
2
- require 'vidazing_logger/appenders/stdout'
3
- require 'vidazing_logger/appenders/stderr'
1
+ # frozen_string_literal: true
4
2
 
5
- require 'logging'
3
+ require 'vidazing_logger/logger'
6
4
 
7
5
  # Namespace for the convenience method to create a new logger
8
6
  #
@@ -10,18 +8,21 @@ require 'logging'
10
8
  # @since 0.1.0
11
9
  module VidazingLogger
12
10
  class << self
13
-
14
11
  # [String]
15
- LOG_DIR = "logs"
16
-
17
- # Creates the 'logs/' directory
18
- def initialize
19
- Dir.mkdir(LOG_DIR) unless Dir.exists?(LOG_DIR)
20
- end
12
+ LOG_DIR = 'logs'
13
+ DEFAULT_LOGGER_NAME = 'VidaZing'
21
14
 
22
15
  # Deletes the 'logs/' directory
23
- def clean
24
- FileUtils.remove_dir(LOG_DIR, true)
16
+ #
17
+ # @param log_dir [String] Directory to delete
18
+ # @return nil
19
+ # @since 0.1.0
20
+ def clean(log_dir = LOG_DIR)
21
+ @vidazing_logger = VidazingLogger::Logger.new \
22
+ log_dir,
23
+ name: DEFAULT_LOGGER_NAME
24
+
25
+ @vidazing_logger.clean
25
26
  end
26
27
 
27
28
  # Create a Logger with 4 Appenders.
@@ -29,19 +30,16 @@ module VidazingLogger
29
30
  # STDOUT + 'logs/build.log'
30
31
  #
31
32
  # @param name [String] Logger name used in messages
33
+ # @param log_dir [String] Directory to write logs in
34
+ # @see VidazingLogger::Logger#build
32
35
  # @return [Logging.logger] See https://github.com/TwP/logging/blob/master/lib/logging/logger.rb
33
- def logger(name = 'VidaZing')
34
- require 'pry'; binding.pry
35
- VidazingLogger.initialize
36
-
37
- log = Logging.logger[name]
38
- log.add_appenders \
39
- VidazingLogger::Appenders::Stdout.stdout_appender,
40
- VidazingLogger::Appenders::Stdout.build_log_appender(LOG_DIR),
41
- VidazingLogger::Appenders::Stderr.stderr_appender,
42
- VidazingLogger::Appenders::Stderr.error_log_appender(LOG_DIR)
36
+ # @since 0.2.0
37
+ def logger(name = DEFAULT_LOGGER_NAME, log_dir = LOG_DIR)
38
+ @vidazing_logger = VidazingLogger::Logger.new \
39
+ log_dir,
40
+ name: name
43
41
 
44
- log
42
+ @vidazing_logger.build
45
43
  end
46
44
  end
47
45
  end
@@ -1,32 +1,45 @@
1
- # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.push File.expand_path("../lib", __FILE__)
3
- require "vidazing_logger/version"
1
+ # frozen_string_literal: true
4
2
 
5
- Gem::Specification.new do |s|
6
- s.name = "vidazing_logger"
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+ require 'vidazing_logger/version'
5
+
6
+ Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
7
+ s.name = 'vidazing_logger'
7
8
  s.version = VidazingLogger::VERSION
8
9
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["VidaZing, Inc."]
10
+ s.authors = ['VidaZing, Inc.']
10
11
  s.licenses = ['MIT']
11
- s.email = ["VidaZing@gmail.com"]
12
- s.homepage = "https://github.com/VidaZing/logger_gem"
13
- s.summary = "Custom logging for VidaZing."
12
+ s.email = ['VidaZing@gmail.com']
13
+ s.homepage = 'https://github.com/VidaZing/logger_gem'
14
+ s.summary = 'Custom logging for VidaZing.'
14
15
  s.executables << 'vidazing_logger'
15
16
 
16
- s.rubygems_version = "2.5.2"
17
- s.required_ruby_version = '>= 1.9.3'
17
+ s.rubygems_version = '2.7.7'
18
+ s.required_ruby_version = '>= 2.5.1'
18
19
 
19
- s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
20
- s.require_paths = ["lib"]
21
- # s.test_files = ["test/test_vidazing_logger.rb"]
20
+ s.files = `git ls-files -z`.split("\x0").reject \
21
+ { |f| f.match(%r{^(test|spec)/}) }
22
+ s.require_paths = ['lib']
22
23
 
23
24
  s.add_runtime_dependency('logging', '2.2.2')
24
25
 
25
- s.add_development_dependency 'rake', '~> 0'
26
- s.add_development_dependency 'rainbow', '3.0.0'
27
- s.add_development_dependency 'rspec', '3.8.0'
26
+ s.add_development_dependency 'awesome_print', '1.8.0'
27
+ s.add_development_dependency 'byebug', '10.0.2'
28
+ s.add_development_dependency 'coveralls', '0.8.22'
29
+ s.add_development_dependency 'flay', '2.12.0'
30
+ s.add_development_dependency 'flog', '4.6.2'
28
31
  s.add_development_dependency 'pry', '0.10.4'
29
32
  s.add_development_dependency 'pry-byebug', '3.6.0'
30
- s.add_development_dependency 'byebug', '10.0.2'
33
+ s.add_development_dependency 'pry-rescue', '1.4.5'
34
+ s.add_development_dependency 'pry-stack_explorer', '0.4.9.2'
35
+ s.add_development_dependency 'rainbow', '3.0.0'
36
+ s.add_development_dependency 'rake', '12.3.1'
37
+ s.add_development_dependency 'rspec', '3.8.0'
38
+ s.add_development_dependency 'rubocop', '0.58.2'
39
+ s.add_development_dependency 'simplecov', '0.16.1'
40
+ s.add_development_dependency 'test-unit', '3.2.8'
31
41
  s.add_development_dependency 'yard', '0.9.16'
42
+
43
+ # Note: Mocha says to load this after test-unit
44
+ s.add_development_dependency 'mocha', '1.7.0'
32
45
  end