logutils 0.3.0 → 0.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.
- data/Manifest.txt +2 -1
- data/README.md +55 -7
- data/Rakefile +1 -1
- data/lib/logutils.rb +59 -7
- data/lib/logutils/db.rb +3 -3
- data/lib/logutils/logger.rb +49 -16
- data/lib/logutils/version.rb +6 -2
- data/test/test_helper.rb +15 -0
- data/test/test_logger.rb +45 -0
- metadata +40 -63
- data/test/test.rb +0 -33
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -8,25 +8,66 @@ Another Logger in Ruby
|
|
8
8
|
|
9
9
|
Logging levels:
|
10
10
|
|
11
|
-
DEBUG < INFO < WARN < ERROR < FATAL
|
11
|
+
[ALL] < DEBUG < INFO < WARN < ERROR < FATAL < [OFF]
|
12
12
|
|
13
|
-
use methods e.g.
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
Start off getting a logger e.g.:
|
15
|
+
|
16
|
+
logger = LogUtils::Logger.new
|
17
|
+
|
18
|
+
or
|
19
|
+
|
20
|
+
include LogUtils
|
21
|
+
|
22
|
+
logger = Logger.new
|
23
|
+
|
24
|
+
now you're ready to log using the methods `#debug`, `#info`, `#warn`, etc.
|
25
|
+
|
17
26
|
logger.debug "msg"
|
18
27
|
logger.info "another msg"
|
19
28
|
logger.warn "another msg"
|
20
29
|
logger.error "another msg"
|
21
30
|
logger.fatal "another msg"
|
22
31
|
|
32
|
+
|
23
33
|
To get a Logger use
|
24
34
|
|
25
|
-
logger =
|
35
|
+
logger = Logger[ self ] # pass in object reference
|
36
|
+
|
37
|
+
or
|
38
|
+
|
39
|
+
logger = Logger[ SportDb::Reader ] # pass in class reference
|
26
40
|
|
27
41
|
or
|
28
42
|
|
29
|
-
logger =
|
43
|
+
logger = Logger[ 'SportDb::Reader' ] # pass in class name (as string)
|
44
|
+
|
45
|
+
|
46
|
+
### `Logging` Mixin
|
47
|
+
|
48
|
+
Note: In a class for convenience you can include the logging machinery
|
49
|
+
with a single line using the Logging mixin e.g.
|
50
|
+
|
51
|
+
include LogUtils::Logging
|
52
|
+
|
53
|
+
This will add/mixin the logger attribute reader e.g.
|
54
|
+
|
55
|
+
def logger
|
56
|
+
@logger ||= Logger[ self ]
|
57
|
+
end
|
58
|
+
|
59
|
+
plus the constants for all logging levels, that is, FATAL, ERROR, WARN, etc.
|
60
|
+
|
61
|
+
Example:
|
62
|
+
|
63
|
+
class SampleClass
|
64
|
+
include Logging
|
65
|
+
|
66
|
+
def initialize
|
67
|
+
logger.info 'hello SampleClass'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
30
71
|
|
31
72
|
### Log to the database using `LogDb`
|
32
73
|
|
@@ -52,7 +93,9 @@ To clean out all log records from the database use:
|
|
52
93
|
|
53
94
|
require 'logutils'
|
54
95
|
|
55
|
-
|
96
|
+
include LogUtils # lets you use Logger instead of LogUtils::Logger
|
97
|
+
|
98
|
+
logger = Logger[ 'Test' ]
|
56
99
|
logger.info 'hello LogUtils'
|
57
100
|
|
58
101
|
require 'logutils/db'
|
@@ -78,6 +121,11 @@ To clean out all log records from the database use:
|
|
78
121
|
|
79
122
|
That's it.
|
80
123
|
|
124
|
+
## Todos
|
125
|
+
|
126
|
+
- [ ] Add UNKNOWN level - why? why not? check std logger
|
127
|
+
|
128
|
+
|
81
129
|
|
82
130
|
## Alternatives
|
83
131
|
|
data/Rakefile
CHANGED
data/lib/logutils.rb
CHANGED
@@ -10,7 +10,6 @@
|
|
10
10
|
|
11
11
|
require 'yaml'
|
12
12
|
require 'pp'
|
13
|
-
require 'logger'
|
14
13
|
require 'fileutils'
|
15
14
|
|
16
15
|
|
@@ -21,8 +20,7 @@ require 'logutils/version'
|
|
21
20
|
require 'logutils/logger'
|
22
21
|
|
23
22
|
|
24
|
-
module LogUtils
|
25
|
-
|
23
|
+
module LogUtils::Kernel
|
26
24
|
=begin # not needed for now; keep it for later
|
27
25
|
|
28
26
|
def self.root
|
@@ -34,15 +32,69 @@ module LogUtils
|
|
34
32
|
end
|
35
33
|
|
36
34
|
=end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
module LogUtils
|
37
39
|
|
38
40
|
###########
|
39
|
-
#
|
40
|
-
# logger = LogUtils[ self ] or
|
41
|
-
# logger = LogUtils[ 'SportDb::Reader' ] etc.
|
41
|
+
# deprecated - remove old api!!!
|
42
42
|
|
43
43
|
def self.[]( class_or_name )
|
44
|
+
|
45
|
+
puts "depreceated API call LogUtils[] - use Logger[] / LogUtils::Logger[] instead"
|
46
|
+
|
44
47
|
# for now always return single instance, that is, use standard/default logger for all
|
45
|
-
STDLOGGER
|
48
|
+
LogUtils::Kernel::STDLOGGER
|
49
|
+
end
|
50
|
+
|
51
|
+
###################################
|
52
|
+
# export public api from kernel
|
53
|
+
|
54
|
+
|
55
|
+
##############################
|
56
|
+
# use it like:
|
57
|
+
# logger = Logger[ self ] or
|
58
|
+
# logger = Logger[ SportDb::Reader ] or
|
59
|
+
# logger = Logger[ 'SportDb::Reader' ] etc.
|
60
|
+
|
61
|
+
Logger = LogUtils::Kernel::Logger
|
62
|
+
include LogUtils::Kernel::Level # e.g. export ALL,DEBUG,INFO,WARN,etc.
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
#####
|
67
|
+
# use it like
|
68
|
+
#
|
69
|
+
# class SampleClass
|
70
|
+
# include LogUtils::Logging
|
71
|
+
# ...
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# or
|
75
|
+
#
|
76
|
+
# include LogUtils
|
77
|
+
#
|
78
|
+
# class SampleClass
|
79
|
+
# include Logging
|
80
|
+
# ...
|
81
|
+
# end
|
82
|
+
#
|
83
|
+
# class AnotherSampleClass
|
84
|
+
# include Logging
|
85
|
+
# ...
|
86
|
+
# def sample_method
|
87
|
+
# logger.debug "calling sample_method"
|
88
|
+
# end
|
89
|
+
# end
|
90
|
+
|
91
|
+
module Logging
|
92
|
+
include LogUtils::Kernel::Level # e.g. lets you use ALL,DEBUG,INFO,WARN,etc.
|
93
|
+
|
94
|
+
def logger
|
95
|
+
@logger ||= LogUtils::Kernel::Logger[ self ]
|
96
|
+
end
|
46
97
|
end
|
47
98
|
|
48
99
|
end # module LogUtils
|
100
|
+
|
data/lib/logutils/db.rb
CHANGED
@@ -16,7 +16,7 @@ require 'logutils/db/deleter'
|
|
16
16
|
|
17
17
|
module LogDb
|
18
18
|
|
19
|
-
VERSION
|
19
|
+
include LogUtils::Kernel # NB: will also include VERSION constant e.g. LogDB::VERSION == LogUtils::Kernel::VERSION
|
20
20
|
|
21
21
|
def self.banner
|
22
22
|
"logdb #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
@@ -34,7 +34,7 @@ LogDB = LogDb
|
|
34
34
|
module LogDb
|
35
35
|
|
36
36
|
class DbListener
|
37
|
-
include
|
37
|
+
include LogDb::Models
|
38
38
|
|
39
39
|
def write( ev )
|
40
40
|
if( ev.fatal? || ev.error? || ev.warn? )
|
@@ -63,7 +63,7 @@ module LogDb
|
|
63
63
|
|
64
64
|
def self.setup # check: use different name? e.g. configure or connect ?? why or why not?
|
65
65
|
# turn on logging to db - assumes active connection
|
66
|
-
|
66
|
+
STDLOGGER.listeners << STDDBLISTENER
|
67
67
|
end
|
68
68
|
|
69
69
|
|
data/lib/logutils/logger.rb
CHANGED
@@ -1,21 +1,47 @@
|
|
1
1
|
|
2
|
-
module LogUtils
|
2
|
+
module LogUtils::Kernel
|
3
3
|
|
4
|
+
## private "kernel" - with include LogUtils - do NOT include everything
|
5
|
+
|
6
|
+
|
7
|
+
#####
|
8
|
+
# use like:
|
9
|
+
# LEVEL_NAME[ DEBUG ] will return 'debug'
|
10
|
+
# LEVEL_NAME[ ERROR ] will return 'error' etc.
|
11
|
+
|
12
|
+
### todo: reverse level integers ??? why? why not??
|
13
|
+
# more logical no output = 0 (off)
|
14
|
+
# everything = 6 (all)
|
15
|
+
# debug = 5 etc.
|
16
|
+
|
4
17
|
module Level
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
18
|
+
ALL = 0
|
19
|
+
DEBUG = 1
|
20
|
+
INFO = 2
|
21
|
+
WARN = 3
|
22
|
+
ERROR = 4
|
23
|
+
FATAL = 5
|
24
|
+
OFF = 6
|
10
25
|
end
|
11
26
|
|
12
27
|
|
13
28
|
class Event
|
14
|
-
include Level
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
29
|
+
include Level # lets you access Level::DEBUG with just DEBUG etc.
|
30
|
+
|
31
|
+
LEVEL_NAME =
|
32
|
+
[
|
33
|
+
'all', # 0
|
34
|
+
'debug', # 1
|
35
|
+
'info', # 2
|
36
|
+
'warn', # 3
|
37
|
+
'error', # 4
|
38
|
+
'fatal', # 5
|
39
|
+
'off' # 6
|
40
|
+
]
|
41
|
+
|
42
|
+
def initialize( levelno, msg )
|
43
|
+
@levelno = levelno # pass in integer e.g. 0,1,2,3,etc.
|
44
|
+
@msg = msg
|
19
45
|
|
20
46
|
@pid = Process.pid
|
21
47
|
@tid = Thread.current.object_id
|
@@ -23,7 +49,10 @@ module LogUtils
|
|
23
49
|
@ts = Time.now
|
24
50
|
end
|
25
51
|
|
26
|
-
|
52
|
+
def level
|
53
|
+
LEVEL_NAME[ @levelno ]
|
54
|
+
end
|
55
|
+
|
27
56
|
attr_reader :msg
|
28
57
|
attr_reader :pid # process_id
|
29
58
|
attr_reader :tid # thread_id
|
@@ -31,15 +60,15 @@ module LogUtils
|
|
31
60
|
|
32
61
|
|
33
62
|
def fatal?
|
34
|
-
@
|
63
|
+
@levelno == FATAL
|
35
64
|
end
|
36
65
|
|
37
66
|
def error?
|
38
|
-
@
|
67
|
+
@levelno == ERROR
|
39
68
|
end
|
40
69
|
|
41
70
|
def warn?
|
42
|
-
@
|
71
|
+
@levelno == WARN
|
43
72
|
end
|
44
73
|
|
45
74
|
|
@@ -66,7 +95,11 @@ module LogUtils
|
|
66
95
|
|
67
96
|
class Logger
|
68
97
|
include Level
|
69
|
-
|
98
|
+
|
99
|
+
def self.[]( class_or_name )
|
100
|
+
STDLOGGER
|
101
|
+
end
|
102
|
+
|
70
103
|
def initialize
|
71
104
|
@listeners = []
|
72
105
|
@listeners << STDLISTENER # by default log to console
|
data/lib/logutils/version.rb
CHANGED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
## $:.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
|
5
|
+
## minitest setup
|
6
|
+
|
7
|
+
# require 'minitest/unit'
|
8
|
+
require 'minitest/autorun'
|
9
|
+
|
10
|
+
# include MiniTest::Unit # lets us use TestCase instead of MiniTest::Unit::TestCase
|
11
|
+
|
12
|
+
|
13
|
+
## our own code
|
14
|
+
|
15
|
+
require 'logutils'
|
data/test/test_logger.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_logger.rb
|
4
|
+
# or better
|
5
|
+
# rake test
|
6
|
+
|
7
|
+
require 'test_helper'
|
8
|
+
|
9
|
+
class TestLogger < MiniTest::Unit::TestCase
|
10
|
+
include LogUtils # lets us use Logger instead of LogUtils::Logger
|
11
|
+
|
12
|
+
####
|
13
|
+
# just for testing testing machinery
|
14
|
+
# simple tests
|
15
|
+
|
16
|
+
def test_root
|
17
|
+
l1 = Logger[ self ]
|
18
|
+
l2 = Logger[ 'Test' ]
|
19
|
+
l3 = Logger[ TestLogger ]
|
20
|
+
|
21
|
+
### nb: for now all return LogUtils::Kernel::STDLOGGER
|
22
|
+
|
23
|
+
assert(l1 == LogUtils::Kernel::STDLOGGER )
|
24
|
+
assert(l2 == LogUtils::Kernel::STDLOGGER )
|
25
|
+
assert(l3 == LogUtils::Kernel::STDLOGGER )
|
26
|
+
end
|
27
|
+
|
28
|
+
class SampleClass
|
29
|
+
include LogUtils # NB: constant from containing class not available (only if class is nested in module)
|
30
|
+
include Logging
|
31
|
+
end
|
32
|
+
|
33
|
+
class Sample2Class
|
34
|
+
include LogUtils::Logging
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_class
|
38
|
+
obj = SampleClass.new
|
39
|
+
obj2 = Sample2Class.new
|
40
|
+
|
41
|
+
assert( obj.logger == LogUtils::Kernel::STDLOGGER )
|
42
|
+
assert( obj2.logger == LogUtils::Kernel::STDLOGGER )
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
metadata
CHANGED
@@ -1,61 +1,45 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: logutils
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 0
|
10
|
-
version: 0.3.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Gerald Bauer
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-02-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rdoc
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &69924980 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 3
|
31
|
-
- 10
|
32
|
-
version: "3.10"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.10'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: hoe
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *69924980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hoe
|
27
|
+
requirement: &69924650 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
29
|
+
requirements:
|
41
30
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 3
|
47
|
-
version: "3.3"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.3'
|
48
33
|
type: :development
|
49
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *69924650
|
50
36
|
description: Another Logger
|
51
37
|
email: opensport@googlegroups.com
|
52
38
|
executables: []
|
53
|
-
|
54
39
|
extensions: []
|
55
|
-
|
56
|
-
extra_rdoc_files:
|
40
|
+
extra_rdoc_files:
|
57
41
|
- Manifest.txt
|
58
|
-
files:
|
42
|
+
files:
|
59
43
|
- History.md
|
60
44
|
- Manifest.txt
|
61
45
|
- README.md
|
@@ -67,43 +51,36 @@ files:
|
|
67
51
|
- lib/logutils/db/schema.rb
|
68
52
|
- lib/logutils/logger.rb
|
69
53
|
- lib/logutils/version.rb
|
70
|
-
- test/
|
54
|
+
- test/test_helper.rb
|
55
|
+
- test/test_logger.rb
|
71
56
|
- .gemtest
|
72
57
|
homepage: https://github.com/geraldb/logutils
|
73
|
-
licenses:
|
58
|
+
licenses:
|
74
59
|
- Public Domain
|
75
60
|
post_install_message:
|
76
|
-
rdoc_options:
|
61
|
+
rdoc_options:
|
77
62
|
- --main
|
78
63
|
- README.md
|
79
|
-
require_paths:
|
64
|
+
require_paths:
|
80
65
|
- lib
|
81
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
67
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
hash: 55
|
87
|
-
segments:
|
88
|
-
- 1
|
89
|
-
- 9
|
90
|
-
- 2
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
91
71
|
version: 1.9.2
|
92
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
73
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
|
98
|
-
segments:
|
99
|
-
- 0
|
100
|
-
version: "0"
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
101
78
|
requirements: []
|
102
|
-
|
103
79
|
rubyforge_project: logutils
|
104
|
-
rubygems_version: 1.8.
|
80
|
+
rubygems_version: 1.8.17
|
105
81
|
signing_key:
|
106
82
|
specification_version: 3
|
107
83
|
summary: Another Logger
|
108
|
-
test_files:
|
109
|
-
|
84
|
+
test_files:
|
85
|
+
- test/test_helper.rb
|
86
|
+
- test/test_logger.rb
|
data/test/test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
puts "before require 'logutils'"
|
3
|
-
require 'logutils'
|
4
|
-
|
5
|
-
puts "LogUtils::VERSION #{LogUtils::VERSION}"
|
6
|
-
|
7
|
-
logger = LogUtils[ 'Test' ]
|
8
|
-
logger.info 'hello LogUtils'
|
9
|
-
|
10
|
-
puts "before require 'logutils/db'"
|
11
|
-
require 'logutils/db'
|
12
|
-
|
13
|
-
|
14
|
-
LOG_DB_PATH = './log.db'
|
15
|
-
|
16
|
-
LOG_DB_CONFIG = {
|
17
|
-
:adapter => 'sqlite3',
|
18
|
-
:database => LOG_DB_PATH
|
19
|
-
}
|
20
|
-
|
21
|
-
require 'active_record'
|
22
|
-
|
23
|
-
pp LOG_DB_CONFIG
|
24
|
-
ActiveRecord::Base.establish_connection( LOG_DB_CONFIG )
|
25
|
-
|
26
|
-
|
27
|
-
LogDb.create
|
28
|
-
|
29
|
-
LogDb.setup
|
30
|
-
|
31
|
-
logger.info 'hola LogUtils'
|
32
|
-
logger.warn 'servus LogUtils'
|
33
|
-
|