52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package hlog
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/pkgerrors"
|
|
)
|
|
|
|
type Logger = zerolog.Logger
|
|
|
|
// Get a pointer to a new zerolog.Logger with the specified level and output
|
|
// Can provide a file, writer or both. Must provide at least one of the two
|
|
func NewLogger(
|
|
logLevel zerolog.Level,
|
|
w io.Writer,
|
|
logFile *os.File,
|
|
logDir string,
|
|
) (*Logger, error) {
|
|
if w == nil && logFile == nil {
|
|
return nil, errors.New("No Writer provided for log output.")
|
|
}
|
|
|
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
|
zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
|
|
|
|
var consoleWriter zerolog.ConsoleWriter
|
|
if w != nil {
|
|
consoleWriter = zerolog.ConsoleWriter{Out: w}
|
|
}
|
|
|
|
var output io.Writer
|
|
if logFile != nil {
|
|
if w != nil {
|
|
output = zerolog.MultiLevelWriter(logFile, consoleWriter)
|
|
} else {
|
|
output = logFile
|
|
}
|
|
} else {
|
|
output = consoleWriter
|
|
}
|
|
logger := zerolog.New(output).
|
|
With().
|
|
Timestamp().
|
|
Logger().
|
|
Level(logLevel)
|
|
|
|
return &logger, nil
|
|
}
|