pkg/sdk/log/package.go (59 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package log
import (
"context"
"io"
"github.com/pkg/errors"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var defaultFactory LoggerFactory
// -----------------------------------------------------------------------------
func init() {
SetLoggerFactory(NewFactory(zap.L()))
}
// SetLoggerFactory defines the default package logger
func SetLoggerFactory(instance LoggerFactory) {
if defaultFactory != nil {
defaultFactory.Bg().Debug("Replacing logger factory", zap.String("old", defaultFactory.Name()), zap.String("new", instance.Name()))
} else {
instance.Bg().Debug("Initializing logger factory", zap.String("factory", instance.Name()))
}
defaultFactory = instance
}
// -----------------------------------------------------------------------------
// Bg delegates a no-context logger
func Bg() Logger {
return checkFactory(defaultFactory).Bg()
}
// For delegates a context logger
func For(ctx context.Context) Logger {
return checkFactory(defaultFactory).For(ctx)
}
// Default returns the logger factory
func Default() LoggerFactory {
return checkFactory(defaultFactory)
}
// CheckErr handles error correctly
func CheckErr(msg string, err error, fields ...zapcore.Field) {
if err != nil {
fields = append(fields, zap.Error(err))
Default().Bg().Error(msg, fields...)
}
}
// CheckErrCtx handles error correctly
func CheckErrCtx(ctx context.Context, msg string, err error, fields ...zapcore.Field) {
if err != nil {
fields = append(fields, zap.Error(errors.WithStack(err)))
Default().For(ctx).Error(msg, fields...)
}
}
// SafeClose handles the closer error
func SafeClose(c io.Closer, msg string, fields ...zapcore.Field) {
if cerr := c.Close(); cerr != nil {
fields = append(fields, zap.Error(errors.WithStack(cerr)))
Default().Bg().Error(msg, fields...)
}
}
// SafeCloseCtx handles the closer error
func SafeCloseCtx(ctx context.Context, c io.Closer, msg string, fields ...zapcore.Field) {
if cerr := c.Close(); cerr != nil {
fields = append(fields, zap.Error(errors.WithStack(cerr)))
Default().For(ctx).Error(msg, fields...)
}
}
// -----------------------------------------------------------------------------
func checkFactory(defaultFactory LoggerFactory) LoggerFactory {
if defaultFactory == nil {
panic("Unable to create logger instance, you have to register an adapter first.")
}
return defaultFactory
}