Files
chain33-dtalk/pkg/log/log.go
2022-03-17 15:59:24 +08:00

89 lines
1.5 KiB
Go

package log
import (
"os"
"github.com/rs/zerolog"
)
const (
DebugLevel Level = "debug"
ReleaseLevel Level = "release"
BenchmarkLevel Level = "benchmark"
)
const (
DefaultDisplay Display = "json"
JsonDisplay Display = "json"
ConsoleDisplay Display = "console"
)
const (
FileMode Mode = "file"
ConsoleMode Mode = "console"
)
type Level string
type Display string
type Mode string
type Config struct {
Level Level
Mode Mode
Path string
Display Display
}
func Init(cfg Config) (zerolog.Logger, error) {
var logger = zerolog.New(os.Stdout).With().Timestamp().Logger()
switch cfg.Display {
case ConsoleDisplay:
logger = logger.Output(zerolog.ConsoleWriter{Out: os.Stdout})
default:
}
switch cfg.Mode {
case ConsoleMode:
case FileMode:
fp, err := createLogFile(cfg.Path)
if err != nil {
return logger, err
}
logger = logger.Output(fp)
default:
}
//set log level
switch cfg.Level {
case DebugLevel:
zerolog.SetGlobalLevel(zerolog.DebugLevel)
case ReleaseLevel:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
case BenchmarkLevel:
zerolog.SetGlobalLevel(zerolog.Disabled)
default:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
return logger, nil
}
var fds = make([]*os.File, 0)
func createLogFile(path string) (*os.File, error) {
f, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm)
if err != nil {
return nil, err
}
//defer f.Close()
fds = append(fds, f)
return f, nil
}
func Close() {
for _, fd := range fds {
fd.Close()
}
}