mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
Adds Advanced Logging to server. Advanced Logging is an optional logging capability that allows customers to send log records to any number of destinations. Supported destinations: - file - syslog (with out without TLS) - raw TCP socket (with out without TLS) Allows developers to specify discrete log levels as well as the standard trace, debug, info, ... panic. Existing code and logging API usage is unchanged. Log records are emitted asynchronously to reduce latency to the caller. Supports hot-reloading of logger config, including adding removing targets. Advanced Logging is configured within config.json via "LogSettings.AdvancedLoggingConfig" which can contain a filespec to another config file, a database DSN, or JSON.
67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package config
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/mattermost/mattermost-server/v5/mlog"
|
|
"github.com/mattermost/mattermost-server/v5/model"
|
|
)
|
|
|
|
// emitter enables threadsafe registration and broadcasting to configuration listeners
|
|
type emitter struct {
|
|
listeners sync.Map
|
|
}
|
|
|
|
// AddListener adds a callback function to invoke when the configuration is modified.
|
|
func (e *emitter) AddListener(listener Listener) string {
|
|
id := model.NewId()
|
|
|
|
e.listeners.Store(id, listener)
|
|
|
|
return id
|
|
}
|
|
|
|
// RemoveListener removes a callback function using an id returned from AddListener.
|
|
func (e *emitter) RemoveListener(id string) {
|
|
e.listeners.Delete(id)
|
|
}
|
|
|
|
// invokeConfigListeners synchronously notifies all listeners about the configuration change.
|
|
func (e *emitter) invokeConfigListeners(oldCfg, newCfg *model.Config) {
|
|
e.listeners.Range(func(key, value interface{}) bool {
|
|
listener := value.(Listener)
|
|
listener(oldCfg, newCfg)
|
|
|
|
return true
|
|
})
|
|
}
|
|
|
|
// srcEmitter enables threadsafe registration and broadcasting to configuration listeners
|
|
type logSrcEmitter struct {
|
|
listeners sync.Map
|
|
}
|
|
|
|
// AddListener adds a callback function to invoke when the configuration is modified.
|
|
func (e *logSrcEmitter) AddListener(listener LogSrcListener) string {
|
|
id := model.NewId()
|
|
e.listeners.Store(id, listener)
|
|
return id
|
|
}
|
|
|
|
// RemoveListener removes a callback function using an id returned from AddListener.
|
|
func (e *logSrcEmitter) RemoveListener(id string) {
|
|
e.listeners.Delete(id)
|
|
}
|
|
|
|
// invokeConfigListeners synchronously notifies all listeners about the configuration change.
|
|
func (e *logSrcEmitter) invokeConfigListeners(oldCfg, newCfg mlog.LogTargetCfg) {
|
|
e.listeners.Range(func(key, value interface{}) bool {
|
|
listener := value.(LogSrcListener)
|
|
listener(oldCfg, newCfg)
|
|
return true
|
|
})
|
|
}
|