diff options
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.go | 61 |
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 +} |