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
=== modified file 'logger_test.go'
--- logger_test.go 2013-05-30 23:22:35 +0000
+++ logger_test.go 2013-06-04 02:41:26 +0000
@@ -2,6 +2,8 @@
22
3import (3import (
4 "fmt"4 "fmt"
5 "io/ioutil"
6 "os"
5 "strings"7 "strings"
6 "testing"8 "testing"
79
@@ -268,3 +270,85 @@
268 c.Assert(s.writer.Log, HasLen, 1)270 c.Assert(s.writer.Log, HasLen, 1)
269 c.Assert(s.writer.Log[0].Message, Equals, "some % included")271 c.Assert(s.writer.Log[0].Message, Equals, "some % included")
270}272}
273
274func (s *logwriterSuite) BenchmarkLoggingNoWriters(c *C) {
275 // No writers
276 loggo.RemoveWriter("test")
277 for i := 0; i < c.N; i++ {
278 s.logger.Warning("just a simple warning for %d", i)
279 }
280}
281
282func (s *logwriterSuite) BenchmarkLoggingNoWritersNoFormat(c *C) {
283 // No writers
284 loggo.RemoveWriter("test")
285 for i := 0; i < c.N; i++ {
286 s.logger.Warning("just a simple warning")
287 }
288}
289
290func (s *logwriterSuite) BenchmarkLoggingTestWriters(c *C) {
291 for i := 0; i < c.N; i++ {
292 s.logger.Warning("just a simple warning for %d", i)
293 }
294 c.Assert(s.writer.Log, HasLen, c.N)
295}
296
297func setupTempFileWriter(c *C) (logFile *os.File, cleanup func()) {
298 loggo.RemoveWriter("test")
299 logFile, err := ioutil.TempFile("", "loggo-test")
300 c.Assert(err, IsNil)
301 cleanup = func() {
302 logFile.Close()
303 os.Remove(logFile.Name())
304 }
305 writer := loggo.NewSimpleWriter(logFile, &loggo.DefaultFormatter{})
306 err = loggo.RegisterWriter("testfile", writer, loggo.TRACE)
307 c.Assert(err, IsNil)
308 return
309}
310
311func (s *logwriterSuite) BenchmarkLoggingDiskWriter(c *C) {
312 logFile, cleanup := setupTempFileWriter(c)
313 defer cleanup()
314 msg := "just a simple warning for %d"
315 for i := 0; i < c.N; i++ {
316 s.logger.Warning(msg, i)
317 }
318 offset, err := logFile.Seek(0, os.SEEK_CUR)
319 c.Assert(err, IsNil)
320 c.Assert((offset > int64(len(msg))*int64(c.N)), Equals, true,
321 Commentf("Not enough data was written to the log file."))
322}
323
324func (s *logwriterSuite) BenchmarkLoggingDiskWriterNoMessages(c *C) {
325 logFile, cleanup := setupTempFileWriter(c)
326 defer cleanup()
327 // Change the log level
328 writer, _, err := loggo.RemoveWriter("testfile")
329 c.Assert(err, IsNil)
330 loggo.RegisterWriter("testfile", writer, loggo.WARNING)
331 msg := "just a simple warning for %d"
332 for i := 0; i < c.N; i++ {
333 s.logger.Debug(msg, i)
334 }
335 offset, err := logFile.Seek(0, os.SEEK_CUR)
336 c.Assert(err, IsNil)
337 c.Assert(offset, Equals, int64(0),
338 Commentf("Data was written to the log file."))
339}
340
341func (s *logwriterSuite) BenchmarkLoggingDiskWriterNoMessagesLogLevel(c *C) {
342 logFile, cleanup := setupTempFileWriter(c)
343 defer cleanup()
344 // Change the log level
345 s.logger.SetLogLevel(loggo.WARNING)
346 msg := "just a simple warning for %d"
347 for i := 0; i < c.N; i++ {
348 s.logger.Debug(msg, i)
349 }
350 offset, err := logFile.Seek(0, os.SEEK_CUR)
351 c.Assert(err, IsNil)
352 c.Assert(offset, Equals, int64(0),
353 Commentf("Data was written to the log file."))
354}
271355
=== modified file 'writer.go'
--- writer.go 2013-05-30 07:19:57 +0000
+++ writer.go 2013-06-04 02:41:26 +0000
@@ -38,6 +38,7 @@
38 level: TRACE,38 level: TRACE,
39 },39 },
40 }40 }
41 globalMinLevel = TRACE
41)42)
4243
43// ResetWriters puts the list of writers back into the initial state.44// ResetWriters puts the list of writers back into the initial state.
@@ -50,6 +51,7 @@
50 level: TRACE,51 level: TRACE,
51 },52 },
52 }53 }
54 findMinLevel()
53}55}
5456
55// ReplaceDefaultWriter is a convenience method that does the equivalent of57// ReplaceDefaultWriter is a convenience method that does the equivalent of
@@ -85,6 +87,7 @@
85 return fmt.Errorf("There is already a Writer registerd with the name %q", name)87 return fmt.Errorf("There is already a Writer registerd with the name %q", name)
86 }88 }
87 writers[name] = &registeredWriter{writer: writer, level: minLevel}89 writers[name] = &registeredWriter{writer: writer, level: minLevel}
90 findMinLevel()
88 return nil91 return nil
89}92}
9093
@@ -98,9 +101,26 @@
98 return nil, NOT_SPECIFIED, fmt.Errorf("No registered Writer called %q", name)101 return nil, NOT_SPECIFIED, fmt.Errorf("No registered Writer called %q", name)
99 }102 }
100 delete(writers, name)103 delete(writers, name)
104 findMinLevel()
101 return registered.writer, registered.level, nil105 return registered.writer, registered.level, nil
102}106}
103107
108func findMinLevel() {
109 // We assume the lock is already held
110 minLevel := CRITICAL
111 for _, registered := range writers {
112 if registered.level < minLevel {
113 minLevel = registered.level
114 }
115 }
116 globalMinLevel = minLevel
117}
118
119// Are there any writers that are interested in this log level?
120func WillWrite(level Level) bool {
121 return level >= globalMinLevel
122}
123
104func writeToWriters(level Level, module, filename string, line int, timestamp time.Time, message string) {124func writeToWriters(level Level, module, filename string, line int, timestamp time.Time, message string) {
105 writerMutex.Lock()125 writerMutex.Lock()
106 defer writerMutex.Unlock()126 defer writerMutex.Unlock()
107127
=== modified file 'writer_test.go'
--- writer_test.go 2013-05-30 04:14:29 +0000
+++ writer_test.go 2013-06-04 02:41:26 +0000
@@ -65,6 +65,23 @@
65 c.Assert(err, ErrorMatches, `There is no "default" writer`)65 c.Assert(err, ErrorMatches, `There is no "default" writer`)
66}66}
6767
68func (s *writerBasicsSuite) TestWillWrite(c *C) {
69 // By default, the root logger watches TRACE messages
70 c.Assert(loggo.WillWrite(loggo.TRACE), Equals, true)
71 // Note: ReplaceDefaultWriter doesn't let us change the default log
72 // level :(
73 writer, _, err := loggo.RemoveWriter("default")
74 c.Assert(err, IsNil)
75 c.Assert(writer, NotNil)
76 err = loggo.RegisterWriter("default", writer, loggo.CRITICAL)
77 c.Assert(err, IsNil)
78 c.Assert(loggo.WillWrite(loggo.TRACE), Equals, false)
79 c.Assert(loggo.WillWrite(loggo.DEBUG), Equals, false)
80 c.Assert(loggo.WillWrite(loggo.INFO), Equals, false)
81 c.Assert(loggo.WillWrite(loggo.WARNING), Equals, false)
82 c.Assert(loggo.WillWrite(loggo.CRITICAL), Equals, true)
83}
84
68type writerSuite struct {85type writerSuite struct {
69 logger loggo.Logger86 logger loggo.Logger
70}87}
@@ -99,7 +116,7 @@
99 // updated.116 // updated.
100 c.Assert(writer.Log, HasLen, 1)117 c.Assert(writer.Log, HasLen, 1)
101 c.Assert(writer.Log[0].Filename, Equals, "writer_test.go")118 c.Assert(writer.Log[0].Filename, Equals, "writer_test.go")
102 c.Assert(writer.Log[0].Line, Equals, 95)119 c.Assert(writer.Log[0].Line, Equals, 112)
103 c.Assert(writer.Log[0].Module, Equals, "test.writer")120 c.Assert(writer.Log[0].Module, Equals, "test.writer")
104}121}
105122

Subscribers

People subscribed via source and target branches

to all changes: