vidazing_logger 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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