mirror of https://bitbucket.org/ausocean/av.git
56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
/*
|
|
DESCRIPTION
|
|
logger.go provides a "safe" global logger by following the singleton pattern.
|
|
Usage of this should be avoided if possible, but in some instances it might be
|
|
necessary, for example implementations of interfaces where logging is required
|
|
but do not offer parameters where a logger can be passed as an argument.
|
|
|
|
AUTHORS
|
|
Saxon A. Nelson-Milton <saxon@ausocean.org>
|
|
|
|
LICENSE
|
|
Copyright (C) 2022 the Australian Ocean Lab (AusOcean)
|
|
|
|
It is free software: you can redistribute it and/or modify them
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation, either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
It is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with revid in gpl.txt. If not, see http://www.gnu.org/licenses.
|
|
*/
|
|
|
|
package global
|
|
|
|
import "bitbucket.org/ausocean/utils/logging"
|
|
|
|
var logger *globalLogger = nil
|
|
|
|
type globalLogger struct {
|
|
logging.Logger
|
|
}
|
|
|
|
// SetLogger sets the global logger. This must be set, and only once, before
|
|
// the GetLogger function is called. If these requirements are violated panics
|
|
// will occur.
|
|
func SetLogger(l logging.Logger) {
|
|
if logger != nil {
|
|
logger.Fatal("attempting set of already instantiated global logger")
|
|
}
|
|
logger = &globalLogger{l}
|
|
}
|
|
|
|
// GetLogger returns the global logger. If this has not been set, a panic will
|
|
// occur.
|
|
func GetLogger() logging.Logger {
|
|
if logger == nil {
|
|
panic("attempted get of uninstantiated global logger")
|
|
}
|
|
return logger
|
|
}
|