grafana/pkg/log/log.go

175 lines
4.8 KiB
Go
Raw Normal View History

2014-10-04 06:33:20 -05:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package log
import (
"fmt"
"os"
"path/filepath"
"strings"
"gopkg.in/ini.v1"
"github.com/inconshreveable/log15"
2014-10-04 06:33:20 -05:00
)
var rootLogger log15.Logger
var loggersToClose []DisposableHandler
2014-10-04 06:33:20 -05:00
func init() {
loggersToClose = make([]DisposableHandler, 0)
rootLogger = log15.Root()
2014-10-04 06:33:20 -05:00
}
func New(logger string, ctx ...interface{}) Logger {
params := append([]interface{}{"logger", logger}, ctx...)
return rootLogger.New(params...)
}
2014-10-04 06:33:20 -05:00
func Trace(format string, v ...interface{}) {
rootLogger.Debug(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Debug(format string, v ...interface{}) {
rootLogger.Debug(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Debug2(message string, v ...interface{}) {
rootLogger.Debug(message, v...)
2014-10-04 06:33:20 -05:00
}
func Info(format string, v ...interface{}) {
rootLogger.Info(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Info2(message string, v ...interface{}) {
rootLogger.Info(message, v...)
2014-10-04 06:33:20 -05:00
}
func Warn(format string, v ...interface{}) {
rootLogger.Warn(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Warn2(message string, v ...interface{}) {
rootLogger.Warn(message, v...)
2014-10-04 06:33:20 -05:00
}
func Error(skip int, format string, v ...interface{}) {
rootLogger.Error(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Error2(message string, v ...interface{}) {
rootLogger.Error(message, v...)
2014-10-04 06:33:20 -05:00
}
func Critical(skip int, format string, v ...interface{}) {
rootLogger.Crit(fmt.Sprintf(format, v))
2014-10-04 06:33:20 -05:00
}
func Fatal(skip int, format string, v ...interface{}) {
rootLogger.Crit(fmt.Sprintf(format, v))
Close()
os.Exit(1)
2014-10-04 06:33:20 -05:00
}
func Close() {
for _, logger := range loggersToClose {
logger.Close()
2014-10-04 06:33:20 -05:00
}
loggersToClose = make([]DisposableHandler, 0)
2014-10-04 06:33:20 -05:00
}
var logLevels = map[string]log15.Lvl{
"Trace": log15.LvlDebug,
"Debug": log15.LvlDebug,
"Info": log15.LvlInfo,
"Warn": log15.LvlWarn,
"Error": log15.LvlError,
"Critical": log15.LvlCrit,
2014-10-04 06:33:20 -05:00
}
func getLogLevel(key string, defaultName string, cfg *ini.File) (string, log15.Lvl) {
levelName := cfg.Section(key).Key("level").In(defaultName, []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"})
2014-10-04 06:33:20 -05:00
level, ok := logLevels[levelName]
if !ok {
rootLogger.Error("Unknown log level", "level", levelName)
2014-10-04 06:33:20 -05:00
}
return levelName, level
2014-10-04 06:33:20 -05:00
}
func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
Close()
2014-10-04 06:33:20 -05:00
defaultLevelName, _ := getLogLevel("log", "Info", cfg)
handlers := make([]log15.Handler, 0)
2014-10-04 06:33:20 -05:00
for _, mode := range modes {
mode = strings.TrimSpace(mode)
sec, err := cfg.GetSection("log." + mode)
if err != nil {
rootLogger.Error("Unknown log mode", "mode", mode)
2014-10-04 06:33:20 -05:00
}
// Log level.
_, level := getLogLevel("log."+mode, defaultLevelName, cfg)
// Generate log configuration.
switch mode {
case "console":
handlers = append(handlers, log15.LvlFilterHandler(level, log15.StdoutHandler))
case "file":
fileName := sec.Key("file_name").MustString(filepath.Join(logsPath, "grafana.log"))
os.MkdirAll(filepath.Dir(fileName), os.ModePerm)
fileHandler := NewFileWriter()
fileHandler.Filename = fileName
fileHandler.Rotate = sec.Key("log_rotate").MustBool(true)
fileHandler.Maxlines = sec.Key("max_lines").MustInt(1000000)
fileHandler.Maxsize = 1 << uint(sec.Key("max_size_shift").MustInt(28))
fileHandler.Daily = sec.Key("daily_rotate").MustBool(true)
fileHandler.Maxdays = sec.Key("max_days").MustInt64(7)
fileHandler.Init()
loggersToClose = append(loggersToClose, fileHandler)
handlers = append(handlers, log15.LazyHandler(fileHandler))
// case "conn":
// LogConfigs[i] = util.DynMap{
// "level": level,
// "reconnectOnMsg": sec.Key("reconnect_on_msg").MustBool(),
// "reconnect": sec.Key("reconnect").MustBool(),
// "net": sec.Key("protocol").In("tcp", []string{"tcp", "unix", "udp"}),
// "addr": sec.Key("addr").MustString(":7020"),
// }
// case "smtp":
// LogConfigs[i] = util.DynMap{
// "level": level,
// "user": sec.Key("user").MustString("example@example.com"),
// "passwd": sec.Key("passwd").MustString("******"),
// "host": sec.Key("host").MustString("127.0.0.1:25"),
// "receivers": sec.Key("receivers").MustString("[]"),
// "subject": sec.Key("subject").MustString("Diagnostic message from serve"),
// }
// case "database":
// LogConfigs[i] = util.DynMap{
// "level": level,
// "driver": sec.Key("driver").String(),
// "conn": sec.Key("conn").String(),
// }
// case "syslog":
// LogConfigs[i] = util.DynMap{
// "level": level,
// "network": sec.Key("network").MustString(""),
// "address": sec.Key("address").MustString(""),
// "facility": sec.Key("facility").MustString("local7"),
// "tag": sec.Key("tag").MustString(""),
// }
}
}
2014-10-04 06:33:20 -05:00
rootLogger.SetHandler(log15.MultiHandler(handlers...))
2014-10-04 06:33:20 -05:00
}