tee_logger 3.1.0 → 3.1.1
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 +3 -0
- data/README.md +28 -0
- data/lib/tee_logger/constants.rb +9 -1
- data/lib/tee_logger/tee_logger_base.rb +117 -0
- data/lib/tee_logger/utils.rb +9 -9
- data/lib/tee_logger/version.rb +1 -1
- data/lib/tee_logger.rb +29 -137
- data/tee_logger.gemspec +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 874f1b444b9aabcee203bb8353f3aa9dad7e949c
|
4
|
+
data.tar.gz: ca390ff17b91be912c99777dd02e67d27289ad5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39ff82dd2e8177e79941cf0c01f42fd9883e07836ae76aa884ff61830047f0354ace54c384019849eb130d13560b0b4ee3e2a5ff337d1762f45ef8e53378982d
|
7
|
+
data.tar.gz: a2e62ecde98d03f0471bcf28ec22ab849ed0ad994eaa6d8292c80bd5b0106338f2b816f74746f887cf579a26d794f3e96522067bb74a7ab14f25aa8f223e1f1b
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
[](https://travis-ci.org/k-ta-yamada/tee_logger)
|
3
3
|
[](https://codeclimate.com/github/k-ta-yamada/tee_logger)
|
4
4
|
[](https://codeclimate.com/github/k-ta-yamada/tee_logger/coverage)
|
5
|
+
[](http://inch-ci.org/github/k-ta-yamada/tee_logger)
|
5
6
|
|
6
7
|
> Sorry. In from version 2 to version 3, changed usage.
|
7
8
|
> see also [CHANGELOG.md](https://github.com/k-ta-yamada/tee_logger/blob/master/CHANGELOG.md).
|
@@ -117,6 +118,33 @@ tl.datetime_format = '%Y%m%d %H%M%S '
|
|
117
118
|
```
|
118
119
|
|
119
120
|
|
121
|
+
## include or extend TeeLogger for casual use
|
122
|
+
|
123
|
+
> TODO: the log file will be in default of `./tee_logger.log`
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
require 'tee_logger'
|
127
|
+
|
128
|
+
class YourAwesomeClass
|
129
|
+
include TeeLogger
|
130
|
+
|
131
|
+
def awesome_method
|
132
|
+
# do somthing
|
133
|
+
logger.info 'this is message is logging and disp console'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
module YourAwesomeModule
|
138
|
+
extend TeeLogger
|
139
|
+
|
140
|
+
def self.awesome_method
|
141
|
+
# do somthing
|
142
|
+
logger.info 'this is message is logging and disp console'
|
143
|
+
end
|
144
|
+
end
|
145
|
+
```
|
146
|
+
|
147
|
+
|
120
148
|
## Development
|
121
149
|
|
122
150
|
After checking out the repo, run `bundle install` to install dependencies.
|
data/lib/tee_logger/constants.rb
CHANGED
@@ -2,19 +2,27 @@
|
|
2
2
|
module TeeLogger
|
3
3
|
# no param of filename, set this filename
|
4
4
|
DEFAULT_FILE = './tee_logger.log'
|
5
|
+
|
5
6
|
# Implements targets
|
6
7
|
LOGGING_METHODS = [:debug, :info, :warn, :error, :fatal]
|
8
|
+
|
7
9
|
# defined logdev names
|
8
10
|
LOGDEV_NAMES = [:console, :logfile]
|
11
|
+
|
9
12
|
# defined paired of logdev name
|
10
13
|
LOGDEV_REVERSE = { console: :logfile, logfile: :console }
|
11
14
|
|
15
|
+
# empty format
|
12
16
|
FORMATTER_FOR_DISABLING = proc { |_severity, _time, _progname, _msg| '' }
|
13
17
|
|
14
|
-
# using
|
18
|
+
# using TeeLogger::Utils.extract_options
|
19
|
+
# @param logdev_name [Symbol]
|
20
|
+
# @param indent_level [Fixnum]
|
15
21
|
ParsedOption = Struct.new(:logdev_name, :indent_level)
|
22
|
+
|
16
23
|
# LOGDEV_NAMES not included error
|
17
24
|
class IncorrectNameError < StandardError; end
|
25
|
+
|
18
26
|
# option's class is not allow
|
19
27
|
class IncorrectOptionError < StandardError; end
|
20
28
|
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# namespace
|
2
|
+
module TeeLogger
|
3
|
+
# main
|
4
|
+
# @see http://www.rubydoc.info/stdlib/logger/Logger Logger
|
5
|
+
class TeeLoggerBase
|
6
|
+
class << self
|
7
|
+
# @!macro [attach] logging_methods
|
8
|
+
# @!method $1(progname = nil, *options, &block)
|
9
|
+
# logging $1 level message.
|
10
|
+
# @param progname see also Logger
|
11
|
+
# @param options [Array]
|
12
|
+
# @option options [Fixnum] indent_level
|
13
|
+
# @option options [Symbol] enabling_target
|
14
|
+
# valid values => [:console, :logfile]
|
15
|
+
# @param &block see also Logger
|
16
|
+
# @return true
|
17
|
+
# @see Logger
|
18
|
+
def define_logging_methods(name)
|
19
|
+
define_method(name) do |progname = nil, *options, &block|
|
20
|
+
logdev_name, indent_level = extract_options(options).values
|
21
|
+
progname, block = indentation(progname, block, indent_level)
|
22
|
+
logging(name, progname, logdev_name, &block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
private :define_logging_methods
|
26
|
+
|
27
|
+
# @!macro [attach] loglevel_check_methods
|
28
|
+
# @!method $1(name)
|
29
|
+
# @return [Boolean]
|
30
|
+
def define_loglevel_check_methods(name)
|
31
|
+
define_method(name) do
|
32
|
+
@console.send(name)
|
33
|
+
@logfile.send(name)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
private :define_loglevel_check_methods
|
37
|
+
end
|
38
|
+
|
39
|
+
include Utils
|
40
|
+
attr_reader :level, :progname, :formatter, :datetime_format
|
41
|
+
|
42
|
+
# @param logdev [String]
|
43
|
+
# @param shift_age [Integer]
|
44
|
+
# @param shift_size [Integer]
|
45
|
+
# @see Logger#initialize
|
46
|
+
def initialize(logdev = DEFAULT_FILE, shift_age = 0, shift_size = 1_048_576)
|
47
|
+
@console = Logger.new($stdout)
|
48
|
+
@logfile = Logger.new(logdev, shift_age, shift_size)
|
49
|
+
end
|
50
|
+
|
51
|
+
define_logging_methods :debug
|
52
|
+
define_logging_methods :info
|
53
|
+
define_logging_methods :warn
|
54
|
+
define_logging_methods :error
|
55
|
+
define_logging_methods :fatal
|
56
|
+
|
57
|
+
define_loglevel_check_methods :debug?
|
58
|
+
define_loglevel_check_methods :info?
|
59
|
+
define_loglevel_check_methods :warn?
|
60
|
+
define_loglevel_check_methods :error?
|
61
|
+
define_loglevel_check_methods :fatal?
|
62
|
+
|
63
|
+
# @param level [Integer]
|
64
|
+
def level=(level)
|
65
|
+
@console.level = @logfile.level = @level = level
|
66
|
+
end
|
67
|
+
alias_method :sev_threshold, :level
|
68
|
+
alias_method :sev_threshold=, :level=
|
69
|
+
|
70
|
+
# @param name [String, Symbol]
|
71
|
+
def progname=(name = nil)
|
72
|
+
@console.progname = @logfile.progname = @progname = name
|
73
|
+
end
|
74
|
+
|
75
|
+
# @param formatter
|
76
|
+
def formatter=(formatter)
|
77
|
+
@console.formatter = @logfile.formatter = @formatter = formatter
|
78
|
+
end
|
79
|
+
|
80
|
+
# @param formatter
|
81
|
+
def datetime_format=(format)
|
82
|
+
@console.datetime_format =
|
83
|
+
@logfile.datetime_format =
|
84
|
+
@datetime_format = format
|
85
|
+
end
|
86
|
+
|
87
|
+
# @param logdev_name [String, Symbol]
|
88
|
+
# @yield before logdev_name disable, after logdev_name enable.
|
89
|
+
def disable(logdev_name)
|
90
|
+
correct_name?(logdev_name)
|
91
|
+
if block_given?
|
92
|
+
disable(logdev_name)
|
93
|
+
yield
|
94
|
+
enable(logdev_name)
|
95
|
+
else
|
96
|
+
logdev_instance(logdev_name).formatter = FORMATTER_FOR_DISABLING
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# @param logdev_name [String, Symbol]
|
101
|
+
def enable(logdev_name)
|
102
|
+
correct_name?(logdev_name)
|
103
|
+
logdev_instance(logdev_name).formatter = @formatter
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def logging(name, progname, logdev_name = nil, &block)
|
109
|
+
if logdev_name
|
110
|
+
disable(logdev_name) { logging(name, progname, &block) }
|
111
|
+
else
|
112
|
+
@console.send(name, progname, &block)
|
113
|
+
@logfile.send(name, progname, &block)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
data/lib/tee_logger/utils.rb
CHANGED
@@ -16,9 +16,9 @@ module TeeLogger
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
# @
|
20
|
-
# @
|
21
|
-
# @
|
19
|
+
# @param progname
|
20
|
+
# @param block
|
21
|
+
# @param indent_level [Fixnum]
|
22
22
|
# @return [Array]
|
23
23
|
def indentation(progname, block, indent_level)
|
24
24
|
if block.nil?
|
@@ -30,7 +30,7 @@ module TeeLogger
|
|
30
30
|
[progname, block]
|
31
31
|
end
|
32
32
|
|
33
|
-
# @
|
33
|
+
# @param val [Object]
|
34
34
|
# @return [String]
|
35
35
|
def formatting(val)
|
36
36
|
case val
|
@@ -40,32 +40,32 @@ module TeeLogger
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
# @
|
43
|
+
# @param val [Symbol]
|
44
44
|
# @return [Symbol]
|
45
45
|
def name_reverse(val)
|
46
46
|
correct_name?(val)
|
47
47
|
LOGDEV_REVERSE[val]
|
48
48
|
end
|
49
49
|
|
50
|
-
# @
|
50
|
+
# @param name [Symbol]
|
51
51
|
# @return [true]
|
52
52
|
def correct_name?(name)
|
53
53
|
LOGDEV_NAMES.include?(name) ? true : incorrect_name_error(name)
|
54
54
|
end
|
55
55
|
|
56
|
-
# @
|
56
|
+
# @param name [Symbol]
|
57
57
|
def incorrect_name_error(name)
|
58
58
|
fail IncorrectNameError,
|
59
59
|
"logdev_name is :console or :logfile. logdev_name=[:#{name}]"
|
60
60
|
end
|
61
61
|
|
62
|
-
# @
|
62
|
+
# @param val [Symbol]
|
63
63
|
def incorrect_option_error(val)
|
64
64
|
fail IncorrectOptionError,
|
65
65
|
"option params is Symbol or Fixnum. class=[#{val.class}]"
|
66
66
|
end
|
67
67
|
|
68
|
-
# @
|
68
|
+
# @param logdev_name [Symbol]
|
69
69
|
# @return [Logger]
|
70
70
|
def logdev_instance(logdev_name)
|
71
71
|
instance_variable_get("@#{logdev_name}")
|
data/lib/tee_logger/version.rb
CHANGED
data/lib/tee_logger.rb
CHANGED
@@ -1,153 +1,45 @@
|
|
1
1
|
require 'tee_logger/version'
|
2
2
|
require 'tee_logger/constants'
|
3
3
|
require 'tee_logger/utils'
|
4
|
+
require 'tee_logger/tee_logger_base'
|
4
5
|
require 'logger'
|
5
6
|
|
6
7
|
# namespace
|
7
8
|
module TeeLogger
|
8
|
-
|
9
|
-
|
10
|
-
def self.new(logdev = DEFAULT_FILE, shift_age = 0, shift_size = 1_048_576)
|
11
|
-
TeeLogger.new(logdev, shift_age, shift_size)
|
12
|
-
end
|
13
|
-
|
14
|
-
# define singleton method .logger for your module.
|
15
|
-
# and TeeLogger.progname is your module name.
|
16
|
-
def self.extended(mod)
|
17
|
-
mod.class_eval do
|
18
|
-
define_singleton_method(:logger) do |logdev = DEFAULT_FILE|
|
19
|
-
return @logger if @logger
|
20
|
-
@logger = TeeLogger.new(logdev)
|
21
|
-
@logger.progname = self
|
22
|
-
@logger
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# define instance method #logger for your class.
|
28
|
-
# and TeeLogger.progname is your class name.
|
29
|
-
def self.included(klass)
|
30
|
-
klass.class_eval do
|
31
|
-
define_method(:logger) do |logdev = DEFAULT_FILE|
|
32
|
-
return @logger if @logger
|
33
|
-
@logger = TeeLogger.new(logdev)
|
34
|
-
@logger.progname = self.class.name
|
35
|
-
@logger
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# main
|
41
|
-
# @see http://www.rubydoc.info/stdlib/logger/Logger Logger
|
42
|
-
class TeeLogger
|
43
|
-
class << self
|
44
|
-
# @!macro [attach] logging_methods
|
45
|
-
# @!method $1(progname = nil, *options, &block)
|
46
|
-
# logging $1 level message.
|
47
|
-
# @param progname see also Logger
|
48
|
-
# @param options [Array]
|
49
|
-
# @option options [Fixnum] indent_level
|
50
|
-
# @option options [Symbol] enabling_target
|
51
|
-
# valid values => [:console, :logfile]
|
52
|
-
# @param &block see also Logger
|
53
|
-
# @return true
|
54
|
-
# @see Logger
|
55
|
-
def define_logging_methods(name)
|
56
|
-
define_method(name) do |progname = nil, *options, &block|
|
57
|
-
logdev_name, indent_level = extract_options(options).values
|
58
|
-
progname, block = indentation(progname, block, indent_level)
|
59
|
-
logging(name, progname, logdev_name, &block)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
private :define_logging_methods
|
63
|
-
|
64
|
-
# @!macro [attach] loglevel_check_methods
|
65
|
-
# @!method $1(name)
|
66
|
-
# @return [Boolean]
|
67
|
-
def define_loglevel_check_methods(name)
|
68
|
-
define_method(name) do
|
69
|
-
@console.send(name)
|
70
|
-
@logfile.send(name)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
private :define_loglevel_check_methods
|
74
|
-
end
|
75
|
-
|
76
|
-
include Utils
|
77
|
-
attr_reader :level, :progname, :formatter, :datetime_format
|
78
|
-
|
9
|
+
class << self
|
10
|
+
# shortcut for TeeLogger::TeeLoggerBase.new
|
79
11
|
# @param logdev [String]
|
80
12
|
# @param shift_age [Integer]
|
81
13
|
# @param shift_size [Integer]
|
82
|
-
# @
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
define_loglevel_check_methods :fatal?
|
99
|
-
|
100
|
-
# @param level [Integer]
|
101
|
-
def level=(level)
|
102
|
-
@console.level = @logfile.level = @level = level
|
103
|
-
end
|
104
|
-
alias_method :sev_threshold, :level
|
105
|
-
alias_method :sev_threshold=, :level=
|
106
|
-
|
107
|
-
# @param name [String, Symbol]
|
108
|
-
def progname=(name = nil)
|
109
|
-
@console.progname = @logfile.progname = @progname = name
|
110
|
-
end
|
111
|
-
|
112
|
-
# @param formatter
|
113
|
-
def formatter=(formatter)
|
114
|
-
@console.formatter = @logfile.formatter = @formatter = formatter
|
115
|
-
end
|
116
|
-
|
117
|
-
# @param formatter
|
118
|
-
def datetime_format=(format)
|
119
|
-
@console.datetime_format =
|
120
|
-
@logfile.datetime_format =
|
121
|
-
@datetime_format = format
|
122
|
-
end
|
123
|
-
|
124
|
-
# @param logdev_name [String, Symbol]
|
125
|
-
# @yield before logdev_name disable, after logdev_name enable.
|
126
|
-
def disable(logdev_name)
|
127
|
-
correct_name?(logdev_name)
|
128
|
-
if block_given?
|
129
|
-
disable(logdev_name)
|
130
|
-
yield
|
131
|
-
enable(logdev_name)
|
132
|
-
else
|
133
|
-
logdev_instance(logdev_name).formatter = FORMATTER_FOR_DISABLING
|
14
|
+
# @return [TeeLogger::TeeLoggerBase]
|
15
|
+
# @see TeeLoggerBase
|
16
|
+
def new(logdev = DEFAULT_FILE, shift_age = 0, shift_size = 1_048_576)
|
17
|
+
TeeLoggerBase.new(logdev, shift_age, shift_size)
|
18
|
+
end
|
19
|
+
|
20
|
+
# define singleton method .logger for your module.
|
21
|
+
# and TeeLogger.progname is your module name.
|
22
|
+
def extended(mod)
|
23
|
+
mod.class_eval do
|
24
|
+
define_singleton_method(:logger) do |logdev = DEFAULT_FILE|
|
25
|
+
return @logger if @logger
|
26
|
+
@logger = TeeLoggerBase.new(logdev)
|
27
|
+
@logger.progname = self
|
28
|
+
@logger
|
29
|
+
end
|
134
30
|
end
|
135
31
|
end
|
136
32
|
|
137
|
-
#
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
disable(logdev_name) { logging(name, progname, &block) }
|
148
|
-
else
|
149
|
-
@console.send(name, progname, &block)
|
150
|
-
@logfile.send(name, progname, &block)
|
33
|
+
# define instance method #logger for your class.
|
34
|
+
# and TeeLogger.progname is your class name.
|
35
|
+
def included(klass)
|
36
|
+
klass.class_eval do
|
37
|
+
define_method(:logger) do |logdev = DEFAULT_FILE|
|
38
|
+
return @logger if @logger
|
39
|
+
@logger = TeeLoggerBase.new(logdev)
|
40
|
+
@logger.progname = self.class.name
|
41
|
+
@logger
|
42
|
+
end
|
151
43
|
end
|
152
44
|
end
|
153
45
|
end
|
data/tee_logger.gemspec
CHANGED
@@ -31,9 +31,9 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency 'pry'
|
32
32
|
spec.add_development_dependency 'pry-doc'
|
33
33
|
spec.add_development_dependency 'pry-theme'
|
34
|
+
spec.add_development_dependency 'pry-byebug'
|
34
35
|
spec.add_development_dependency 'rubocop'
|
35
36
|
|
36
37
|
spec.add_development_dependency 'capture_stdout'
|
37
38
|
spec.add_development_dependency 'fakefs'
|
38
|
-
spec.add_development_dependency 'parallel'
|
39
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tee_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k-ta-yamada
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: pry-byebug
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: rubocop
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: capture_stdout
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: fakefs
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- Rakefile
|
183
183
|
- lib/tee_logger.rb
|
184
184
|
- lib/tee_logger/constants.rb
|
185
|
+
- lib/tee_logger/tee_logger_base.rb
|
185
186
|
- lib/tee_logger/utils.rb
|
186
187
|
- lib/tee_logger/version.rb
|
187
188
|
- tee_logger.gemspec
|
@@ -205,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
206
|
version: '0'
|
206
207
|
requirements: []
|
207
208
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.
|
209
|
+
rubygems_version: 2.4.8
|
209
210
|
signing_key:
|
210
211
|
specification_version: 4
|
211
212
|
summary: logging to file and standard output.
|