Merge lp:~jameinel/loggo/benchmarks into lp:loggo

Proposed by Tim Penhey
Status: Merged
Merged at revision: 34
Proposed branch: lp:~jameinel/loggo/benchmarks
Merge into: lp:loggo
Diff against target: 189 lines (+122/-1)
3 files modified
logger_test.go (+84/-0)
writer.go (+20/-0)
writer_test.go (+18/-1)
To merge this branch: bzr merge lp:~jameinel/loggo/benchmarks
Reviewer Review Type Date Requested Status
Tim Penhey Pending
Review via email: mp+167193@code.launchpad.net

Description of the change

Creating so I can see the diff :)

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'logger_test.go'
2--- logger_test.go 2013-05-30 23:22:35 +0000
3+++ logger_test.go 2013-06-04 02:41:26 +0000
4@@ -2,6 +2,8 @@
5
6 import (
7 "fmt"
8+ "io/ioutil"
9+ "os"
10 "strings"
11 "testing"
12
13@@ -268,3 +270,85 @@
14 c.Assert(s.writer.Log, HasLen, 1)
15 c.Assert(s.writer.Log[0].Message, Equals, "some % included")
16 }
17+
18+func (s *logwriterSuite) BenchmarkLoggingNoWriters(c *C) {
19+ // No writers
20+ loggo.RemoveWriter("test")
21+ for i := 0; i < c.N; i++ {
22+ s.logger.Warning("just a simple warning for %d", i)
23+ }
24+}
25+
26+func (s *logwriterSuite) BenchmarkLoggingNoWritersNoFormat(c *C) {
27+ // No writers
28+ loggo.RemoveWriter("test")
29+ for i := 0; i < c.N; i++ {
30+ s.logger.Warning("just a simple warning")
31+ }
32+}
33+
34+func (s *logwriterSuite) BenchmarkLoggingTestWriters(c *C) {
35+ for i := 0; i < c.N; i++ {
36+ s.logger.Warning("just a simple warning for %d", i)
37+ }
38+ c.Assert(s.writer.Log, HasLen, c.N)
39+}
40+
41+func setupTempFileWriter(c *C) (logFile *os.File, cleanup func()) {
42+ loggo.RemoveWriter("test")
43+ logFile, err := ioutil.TempFile("", "loggo-test")
44+ c.Assert(err, IsNil)
45+ cleanup = func() {
46+ logFile.Close()
47+ os.Remove(logFile.Name())
48+ }
49+ writer := loggo.NewSimpleWriter(logFile, &loggo.DefaultFormatter{})
50+ err = loggo.RegisterWriter("testfile", writer, loggo.TRACE)
51+ c.Assert(err, IsNil)
52+ return
53+}
54+
55+func (s *logwriterSuite) BenchmarkLoggingDiskWriter(c *C) {
56+ logFile, cleanup := setupTempFileWriter(c)
57+ defer cleanup()
58+ msg := "just a simple warning for %d"
59+ for i := 0; i < c.N; i++ {
60+ s.logger.Warning(msg, i)
61+ }
62+ offset, err := logFile.Seek(0, os.SEEK_CUR)
63+ c.Assert(err, IsNil)
64+ c.Assert((offset > int64(len(msg))*int64(c.N)), Equals, true,
65+ Commentf("Not enough data was written to the log file."))
66+}
67+
68+func (s *logwriterSuite) BenchmarkLoggingDiskWriterNoMessages(c *C) {
69+ logFile, cleanup := setupTempFileWriter(c)
70+ defer cleanup()
71+ // Change the log level
72+ writer, _, err := loggo.RemoveWriter("testfile")
73+ c.Assert(err, IsNil)
74+ loggo.RegisterWriter("testfile", writer, loggo.WARNING)
75+ msg := "just a simple warning for %d"
76+ for i := 0; i < c.N; i++ {
77+ s.logger.Debug(msg, i)
78+ }
79+ offset, err := logFile.Seek(0, os.SEEK_CUR)
80+ c.Assert(err, IsNil)
81+ c.Assert(offset, Equals, int64(0),
82+ Commentf("Data was written to the log file."))
83+}
84+
85+func (s *logwriterSuite) BenchmarkLoggingDiskWriterNoMessagesLogLevel(c *C) {
86+ logFile, cleanup := setupTempFileWriter(c)
87+ defer cleanup()
88+ // Change the log level
89+ s.logger.SetLogLevel(loggo.WARNING)
90+ msg := "just a simple warning for %d"
91+ for i := 0; i < c.N; i++ {
92+ s.logger.Debug(msg, i)
93+ }
94+ offset, err := logFile.Seek(0, os.SEEK_CUR)
95+ c.Assert(err, IsNil)
96+ c.Assert(offset, Equals, int64(0),
97+ Commentf("Data was written to the log file."))
98+}
99
100=== modified file 'writer.go'
101--- writer.go 2013-05-30 07:19:57 +0000
102+++ writer.go 2013-06-04 02:41:26 +0000
103@@ -38,6 +38,7 @@
104 level: TRACE,
105 },
106 }
107+ globalMinLevel = TRACE
108 )
109
110 // ResetWriters puts the list of writers back into the initial state.
111@@ -50,6 +51,7 @@
112 level: TRACE,
113 },
114 }
115+ findMinLevel()
116 }
117
118 // ReplaceDefaultWriter is a convenience method that does the equivalent of
119@@ -85,6 +87,7 @@
120 return fmt.Errorf("There is already a Writer registerd with the name %q", name)
121 }
122 writers[name] = &registeredWriter{writer: writer, level: minLevel}
123+ findMinLevel()
124 return nil
125 }
126
127@@ -98,9 +101,26 @@
128 return nil, NOT_SPECIFIED, fmt.Errorf("No registered Writer called %q", name)
129 }
130 delete(writers, name)
131+ findMinLevel()
132 return registered.writer, registered.level, nil
133 }
134
135+func findMinLevel() {
136+ // We assume the lock is already held
137+ minLevel := CRITICAL
138+ for _, registered := range writers {
139+ if registered.level < minLevel {
140+ minLevel = registered.level
141+ }
142+ }
143+ globalMinLevel = minLevel
144+}
145+
146+// Are there any writers that are interested in this log level?
147+func WillWrite(level Level) bool {
148+ return level >= globalMinLevel
149+}
150+
151 func writeToWriters(level Level, module, filename string, line int, timestamp time.Time, message string) {
152 writerMutex.Lock()
153 defer writerMutex.Unlock()
154
155=== modified file 'writer_test.go'
156--- writer_test.go 2013-05-30 04:14:29 +0000
157+++ writer_test.go 2013-06-04 02:41:26 +0000
158@@ -65,6 +65,23 @@
159 c.Assert(err, ErrorMatches, `There is no "default" writer`)
160 }
161
162+func (s *writerBasicsSuite) TestWillWrite(c *C) {
163+ // By default, the root logger watches TRACE messages
164+ c.Assert(loggo.WillWrite(loggo.TRACE), Equals, true)
165+ // Note: ReplaceDefaultWriter doesn't let us change the default log
166+ // level :(
167+ writer, _, err := loggo.RemoveWriter("default")
168+ c.Assert(err, IsNil)
169+ c.Assert(writer, NotNil)
170+ err = loggo.RegisterWriter("default", writer, loggo.CRITICAL)
171+ c.Assert(err, IsNil)
172+ c.Assert(loggo.WillWrite(loggo.TRACE), Equals, false)
173+ c.Assert(loggo.WillWrite(loggo.DEBUG), Equals, false)
174+ c.Assert(loggo.WillWrite(loggo.INFO), Equals, false)
175+ c.Assert(loggo.WillWrite(loggo.WARNING), Equals, false)
176+ c.Assert(loggo.WillWrite(loggo.CRITICAL), Equals, true)
177+}
178+
179 type writerSuite struct {
180 logger loggo.Logger
181 }
182@@ -99,7 +116,7 @@
183 // updated.
184 c.Assert(writer.Log, HasLen, 1)
185 c.Assert(writer.Log[0].Filename, Equals, "writer_test.go")
186- c.Assert(writer.Log[0].Line, Equals, 95)
187+ c.Assert(writer.Log[0].Line, Equals, 112)
188 c.Assert(writer.Log[0].Module, Equals, "test.writer")
189 }
190

Subscribers

People subscribed via source and target branches

to all changes: