timestamped-logger 1.0.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/README +31 -0
- data/lib/timestamped_logger.rb +27 -0
- data/spec/timestamped_logger_spec.rb +75 -0
- metadata +74 -0
data/README
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
TimestampedLogger gives you a simple way to create a well-formatted log, including timetsamps, and formatted logging of error messages.
|
2
|
+
|
3
|
+
# create the log
|
4
|
+
IMPORT_LOGGER = TimestampedLogger.new(“#{RAILS_ROOT}/log/imports.log”)
|
5
|
+
|
6
|
+
# log normal information
|
7
|
+
IMPORT_LOGGER.info("Started importing")
|
8
|
+
# produces: 2010-01-02 03:04:05 | Started importing
|
9
|
+
|
10
|
+
# log without timestamp
|
11
|
+
IMPORT_LOGGER.info("I don't care when this happened", false)
|
12
|
+
# produces: "I don't care when this happened"
|
13
|
+
|
14
|
+
# log some information, and then indent related info
|
15
|
+
IMPORT_LOGGER.info("started importing")
|
16
|
+
IMPORT_LOGGER.sub_info("started this sub-step")
|
17
|
+
IMPORT_LOGGER.sub_info("started this other sub-step")
|
18
|
+
IMPORT_LOGGER.info("ended importing")
|
19
|
+
# produces:
|
20
|
+
# 2010-01-02 03:04:05 | started importing
|
21
|
+
# 2010-01-02 03:04:06 | started this sub-step
|
22
|
+
# 2010-01-02 03:07:00 | started this other sub-step
|
23
|
+
# 2010-01-02 03:09:36 | ended importing
|
24
|
+
|
25
|
+
# log an error and it's backtrace
|
26
|
+
IMPORT_LOGGER.backtrace(exception, "Oh no, error during import")
|
27
|
+
# produces:
|
28
|
+
# 2010-01-02 03:04:05 | Oh no, error during import
|
29
|
+
# 2010-01-02 03:04:05 | RuntimeException Foo
|
30
|
+
# 2010-01-02 03:04:06 | ---> first line of the backtrace
|
31
|
+
# 2010-01-02 03:04:07 | ---> second line of the backtrace
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class TimestampedLogger < Logger
|
2
|
+
|
3
|
+
def info(message, include_timestamp = true)
|
4
|
+
message = "#{Time.now.to_s(:db)} | #{message}" if include_timestamp
|
5
|
+
super(message)
|
6
|
+
end
|
7
|
+
|
8
|
+
def error(message)
|
9
|
+
super("#{Time.now.to_s(:db)} | #{message}")
|
10
|
+
end
|
11
|
+
|
12
|
+
def sub_info(message, include_timestamp = true)
|
13
|
+
info(" #{message}", include_timestamp)
|
14
|
+
end
|
15
|
+
|
16
|
+
def backtrace(exception, message = "")
|
17
|
+
if exception.respond_to?(:backtrace)
|
18
|
+
info("================================================", false)
|
19
|
+
error(message) unless message.empty?
|
20
|
+
error(exception.message)
|
21
|
+
exception.backtrace.to_a.each do |bt|
|
22
|
+
info(" ---> #{bt}", false)
|
23
|
+
end
|
24
|
+
info("================================================", false)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "/spec_helper")
|
2
|
+
|
3
|
+
describe TimestampedLogger, "Adds an info message to the log" do
|
4
|
+
it "should call the logger info method with the timestamp on the front" do
|
5
|
+
File.delete(File.join(File.dirname(__FILE__), "/spec.log"))
|
6
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
7
|
+
t = Time.new
|
8
|
+
t.stubs(:to_s => "date")
|
9
|
+
Time.stubs(:now).returns(t)
|
10
|
+
log.info("message")
|
11
|
+
|
12
|
+
File.open(File.join(File.dirname(__FILE__), "/spec.log"), 'r') { |f|
|
13
|
+
f.read.should include('date | message')
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe TimestampedLogger, "Adds an error message to the log" do
|
19
|
+
it "should call the logger error method with the timestamp on the front" do
|
20
|
+
File.delete(File.join(File.dirname(__FILE__), "/spec.log"))
|
21
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
22
|
+
t = Time.new
|
23
|
+
t.stubs(:to_s => "date")
|
24
|
+
Time.stubs(:now).returns(t)
|
25
|
+
log.error("message")
|
26
|
+
|
27
|
+
File.open(File.join(File.dirname(__FILE__), "/spec.log"), 'r') { |f|
|
28
|
+
f.read.should include('date | message')
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe TimestampedLogger, "Adds a sub message to the log" do
|
35
|
+
it "should call the logger info method with the timestamp and spaces on the front and the default timestamp value" do
|
36
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
37
|
+
log.expects(:info).with(" message", true)
|
38
|
+
log.sub_info("message")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should call the logger info method with the value of the timestamp parameter passed" do
|
42
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
43
|
+
log.expects(:info).with(" message", false)
|
44
|
+
log.sub_info("message", false)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe TimestampedLogger, "Add a back trace error" do
|
49
|
+
it "should log nothing if what is passed doesn't responsd to the backtrace method" do
|
50
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
51
|
+
log.expects(:info).never
|
52
|
+
log.backtrace("string")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should log the backtrace of the error passed" do
|
56
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
57
|
+
excep = mock('Exception', :backtrace => ['line 1', 'line 2'], :message => 'message')
|
58
|
+
log.expects(:info).with("================================================", false).twice
|
59
|
+
log.expects(:error).with('message')
|
60
|
+
log.expects(:info).with(" ---> line 1", false)
|
61
|
+
log.expects(:info).with(" ---> line 2", false)
|
62
|
+
log.backtrace(excep)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should log the backtrace of the error passed and the message passed" do
|
66
|
+
log = TimestampedLogger.new(File.join(File.dirname(__FILE__), "/spec.log"))
|
67
|
+
excep = mock('Exception', :backtrace => ['line 1', 'line 2'], :message => 'message')
|
68
|
+
log.expects(:info).with("================================================", false).twice
|
69
|
+
log.expects(:error).with('message')
|
70
|
+
log.expects(:error).with('passing a message')
|
71
|
+
log.expects(:info).with(" ---> line 1", false)
|
72
|
+
log.expects(:info).with(" ---> line 2", false)
|
73
|
+
log.backtrace(excep, 'passing a message')
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: timestamped-logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- William Spencer
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-06-17 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
description:
|
33
|
+
email:
|
34
|
+
executables: []
|
35
|
+
|
36
|
+
extensions: []
|
37
|
+
|
38
|
+
extra_rdoc_files:
|
39
|
+
- README
|
40
|
+
files:
|
41
|
+
- lib/timestamped_logger.rb
|
42
|
+
- README
|
43
|
+
has_rdoc: true
|
44
|
+
homepage:
|
45
|
+
licenses: []
|
46
|
+
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.3.6
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: Adds timestamps to logs. Adds formating for adding backtraces to logs. Allows sub messages related to heading messages.
|
73
|
+
test_files:
|
74
|
+
- spec/timestamped_logger_spec.rb
|