~jameinel/loggo/benchmarks

« back to all changes in this revision

Viewing changes to writer.go

  • Committer: John Arbash Meinel
  • Date: 2013-06-02 10:40:23 UTC
  • Revision ID: john@arbash-meinel.com-20130602104023-y1k36pqoop6j8frc
Cache the global minimum log level necessary to get out to a writer.

With this change, we drop from 1200ns for no-op writes all the way down to
25ns. However, this might be better done at the logging side, rather than at the
writer side.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
                        level:  TRACE,
39
39
                },
40
40
        }
 
41
        globalMinLevel = TRACE
41
42
)
42
43
 
43
44
// ResetWriters puts the list of writers back into the initial state.
50
51
                        level:  TRACE,
51
52
                },
52
53
        }
 
54
        findMinLevel()
53
55
}
54
56
 
55
57
// ReplaceDefaultWriter is a convenience method that does the equivalent of
85
87
                return fmt.Errorf("There is already a Writer registerd with the name %q", name)
86
88
        }
87
89
        writers[name] = &registeredWriter{writer: writer, level: minLevel}
 
90
        findMinLevel()
88
91
        return nil
89
92
}
90
93
 
98
101
                return nil, NOT_SPECIFIED, fmt.Errorf("No registered Writer called %q", name)
99
102
        }
100
103
        delete(writers, name)
 
104
        findMinLevel()
101
105
        return registered.writer, registered.level, nil
102
106
}
103
107
 
 
108
func 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?
 
120
func WillWrite(level Level) bool {
 
121
        return level >= globalMinLevel
 
122
}
 
123
 
104
124
func writeToWriters(level Level, module, filename string, line int, timestamp time.Time, message string) {
105
125
        writerMutex.Lock()
106
126
        defer writerMutex.Unlock()