mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-13 01:43:09 -06:00
Make logging configuration more extensible
Signed-off-by: Tristan Claverie <public@tclaverie.eu>
This commit is contained in:
parent
c26d23b89f
commit
473c5efe59
|
|
@ -121,9 +121,19 @@ tracing:
|
||||||
jaeger:
|
jaeger:
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
# The configuration for logs of dendrite
|
# The configuration for dendrite logs
|
||||||
logging:
|
logging:
|
||||||
# The logging level, must be one of debug, info, warn, error, fatal, panic.
|
# The logging type, only "file" is supported at the moment
|
||||||
level: "info"
|
- type: "file"
|
||||||
# The file on which save logs. If commented, logs won't be saved by dendrite and only printed to stdout
|
# The logging level, must be one of debug, info, warn, error, fatal, panic.
|
||||||
# path: /var/log/dendrite.log
|
level: "info"
|
||||||
|
# Parameters for this type of log
|
||||||
|
params:
|
||||||
|
# File logging must be given a path to a directory. Each component will write to a different file. Logs are rotated each day and gzipped
|
||||||
|
path: "/var/log/dendrite"
|
||||||
|
# It is possible to have multiple logging hooks at the same time.
|
||||||
|
# To save only errors in a different directory, uncomment the following.
|
||||||
|
# - type: "file"
|
||||||
|
# level: "error"
|
||||||
|
# params:
|
||||||
|
# path: "/var/log/dendrite/errors"
|
||||||
|
|
|
||||||
|
|
@ -206,14 +206,8 @@ type Dendrite struct {
|
||||||
Jaeger jaegerconfig.Configuration `yaml:"jaeger"`
|
Jaeger jaegerconfig.Configuration `yaml:"jaeger"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// The config for logging informations
|
// The config for logging informations. Each hook will be added to logrus.
|
||||||
Logging struct {
|
Logging []Hook `yaml:"logging"`
|
||||||
// The path to the log file
|
|
||||||
FPath Path `yaml:"path"`
|
|
||||||
|
|
||||||
// The logging level
|
|
||||||
Level string `yaml:"level"`
|
|
||||||
} `yaml:"logging"`
|
|
||||||
|
|
||||||
// Any information derived from the configuration options for later use.
|
// Any information derived from the configuration options for later use.
|
||||||
Derived struct {
|
Derived struct {
|
||||||
|
|
@ -228,9 +222,6 @@ type Dendrite struct {
|
||||||
// registration in order to complete registration stages.
|
// registration in order to complete registration stages.
|
||||||
Params map[string]interface{} `json:"params"`
|
Params map[string]interface{} `json:"params"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// The logrus level used for logging configuration
|
|
||||||
LogLevel logrus.Level
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -261,6 +252,52 @@ type ThumbnailSize struct {
|
||||||
ResizeMethod string `yaml:"method,omitempty"`
|
ResizeMethod string `yaml:"method,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hook represents a single logrus hook. At this point, only parsing and
|
||||||
|
// verification of the proper values for type and level are done.
|
||||||
|
// Validity/integrity checks on the parameters are done when configuring logrus.
|
||||||
|
type Hook struct {
|
||||||
|
// The type of hook, currently only "file" is supported.
|
||||||
|
// Yaml key is "type"
|
||||||
|
Type string
|
||||||
|
|
||||||
|
// The level of the logs to produce. Will output only this level and above.
|
||||||
|
//Yaml key is "level"
|
||||||
|
Level logrus.Level
|
||||||
|
|
||||||
|
// The parameters for this hook.
|
||||||
|
// Yaml key is "params"
|
||||||
|
Params map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalYAML performs type coercion for a logrus hook. Additionally,
|
||||||
|
// it ensures the type is one supported.
|
||||||
|
func (hook *Hook) UnmarshalYAML(unmarshaler func(interface{}) error) error {
|
||||||
|
var tmp struct {
|
||||||
|
Type string `yaml:"type"`
|
||||||
|
Level string `yaml:"level"`
|
||||||
|
Params map[string]interface{} `yaml:"params"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := unmarshaler(&tmp); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if tmp.Type != "file" {
|
||||||
|
return fmt.Errorf("Unknown value for %q: %s, want one of [file]", "logging.type", tmp.Type)
|
||||||
|
}
|
||||||
|
|
||||||
|
level, err := logrus.ParseLevel(tmp.Level)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unknown value for %q: %s, want one of [debug,info,warn,error,fatal,panic]", "logging.level", tmp.Level)
|
||||||
|
}
|
||||||
|
|
||||||
|
hook.Type = tmp.Type
|
||||||
|
hook.Level = level
|
||||||
|
hook.Params = tmp.Params
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Load a yaml config file for a server run as multiple processes.
|
// Load a yaml config file for a server run as multiple processes.
|
||||||
// Checks the config to ensure that it is valid.
|
// Checks the config to ensure that it is valid.
|
||||||
// The checks are different if the server is run as a monolithic process instead
|
// The checks are different if the server is run as a monolithic process instead
|
||||||
|
|
@ -484,12 +521,6 @@ func (config *Dendrite) check(monolithic bool) error {
|
||||||
checkNotEmpty("listen.room_server", string(config.Listen.RoomServer))
|
checkNotEmpty("listen.room_server", string(config.Listen.RoomServer))
|
||||||
}
|
}
|
||||||
|
|
||||||
if level, err := logrus.ParseLevel(config.Logging.Level); err != nil {
|
|
||||||
problems = append(problems, fmt.Sprintf("Invalid value for key logging.level: %s", config.Logging.Level))
|
|
||||||
} else {
|
|
||||||
config.Derived.LogLevel = level
|
|
||||||
}
|
|
||||||
|
|
||||||
if problems != nil {
|
if problems != nil {
|
||||||
return Error{problems}
|
return Error{problems}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,10 @@ listen:
|
||||||
sync_api: "localhost:7773"
|
sync_api: "localhost:7773"
|
||||||
media_api: "localhost:7774"
|
media_api: "localhost:7774"
|
||||||
logging:
|
logging:
|
||||||
level: "debug"
|
- type: "file"
|
||||||
path: "/my/log/dir/dendrite.log"
|
level: "info"
|
||||||
|
params:
|
||||||
|
path: "/my/log/dir"
|
||||||
`
|
`
|
||||||
|
|
||||||
type mockReadFile map[string]string
|
type mockReadFile map[string]string
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue