summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go')
-rw-r--r--src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go b/src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go
new file mode 100644
index 00000000000..ae1734b2780
--- /dev/null
+++ b/src/mongo/gotools/vendor/src/github.com/spacemonkeygo/spacelog/logger.go
@@ -0,0 +1,61 @@
+// Copyright (C) 2014 Space Monkey, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package spacelog
+
+import (
+ "sync"
+ "sync/atomic"
+)
+
+// Logger is the basic type that allows for logging. A logger has an associated
+// name, given to it during construction, either through a logger collection,
+// GetLogger, GetLoggerNamed, or another Logger's Scope method. A logger also
+// has an associated level and handler, typically configured through the logger
+// collection to which it belongs.
+type Logger struct {
+ level LogLevel
+ name string
+ collection *LoggerCollection
+
+ handler_mtx sync.RWMutex
+ handler Handler
+}
+
+// Scope returns a new Logger with the same level and handler, using the
+// receiver Logger's name as a prefix.
+func (l *Logger) Scope(name string) *Logger {
+ return l.collection.getLogger(l.name+"."+name, l.getLevel(),
+ l.getHandler())
+}
+
+func (l *Logger) setLevel(level LogLevel) {
+ atomic.StoreInt32((*int32)(&l.level), int32(level))
+}
+
+func (l *Logger) getLevel() LogLevel {
+ return LogLevel(atomic.LoadInt32((*int32)(&l.level)))
+}
+
+func (l *Logger) setHandler(handler Handler) {
+ l.handler_mtx.Lock()
+ defer l.handler_mtx.Unlock()
+ l.handler = handler
+}
+
+func (l *Logger) getHandler() Handler {
+ l.handler_mtx.RLock()
+ defer l.handler_mtx.RUnlock()
+ return l.handler
+}