mirror of https://github.com/usememos/memos
chore: update logger
parent
12f4d3a10d
commit
dfa78cac49
@ -1,66 +0,0 @@
|
|||||||
package log
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go.uber.org/zap"
|
|
||||||
"go.uber.org/zap/zapcore"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// `gl` is the global logger.
|
|
||||||
// Other packages should use public methods such as Info/Error to do the logging.
|
|
||||||
// For other types of logging, e.g. logging to a separate file, they should use their own loggers.
|
|
||||||
gl *zap.Logger
|
|
||||||
gLevel zap.AtomicLevel
|
|
||||||
)
|
|
||||||
|
|
||||||
// Initializes the global console logger.
|
|
||||||
func init() {
|
|
||||||
gLevel = zap.NewAtomicLevelAt(zap.InfoLevel)
|
|
||||||
gl, _ = zap.Config{
|
|
||||||
Level: gLevel,
|
|
||||||
Development: true,
|
|
||||||
// Use "console" to print readable stacktrace.
|
|
||||||
Encoding: "console",
|
|
||||||
EncoderConfig: zap.NewDevelopmentEncoderConfig(),
|
|
||||||
OutputPaths: []string{"stderr"},
|
|
||||||
ErrorOutputPaths: []string{"stderr"},
|
|
||||||
}.Build(
|
|
||||||
// Skip one caller stack to locate the correct caller.
|
|
||||||
zap.AddCallerSkip(1),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetLevel wraps the zap Level's SetLevel method.
|
|
||||||
func SetLevel(level zapcore.Level) {
|
|
||||||
gLevel.SetLevel(level)
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnabledLevel wraps the zap Level's Enabled method.
|
|
||||||
func EnabledLevel(level zapcore.Level) bool {
|
|
||||||
return gLevel.Enabled(level)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Debug wraps the zap Logger's Debug method.
|
|
||||||
func Debug(msg string, fields ...zap.Field) {
|
|
||||||
gl.Debug(msg, fields...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info wraps the zap Logger's Info method.
|
|
||||||
func Info(msg string, fields ...zap.Field) {
|
|
||||||
gl.Info(msg, fields...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Warn wraps the zap Logger's Warn method.
|
|
||||||
func Warn(msg string, fields ...zap.Field) {
|
|
||||||
gl.Warn(msg, fields...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error wraps the zap Logger's Error method.
|
|
||||||
func Error(msg string, fields ...zap.Field) {
|
|
||||||
gl.Error(msg, fields...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sync wraps the zap Logger's Sync method.
|
|
||||||
func Sync() {
|
|
||||||
_ = gl.Sync()
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
package v2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoggerInterceptor struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewLoggerInterceptor() *LoggerInterceptor {
|
||||||
|
return &LoggerInterceptor{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (in *LoggerInterceptor) LoggerInterceptor(ctx context.Context, request any, serverInfo *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
|
||||||
|
resp, err := handler(ctx, request)
|
||||||
|
in.loggerInterceptorDo(ctx, serverInfo.FullMethod, err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*LoggerInterceptor) loggerInterceptorDo(ctx context.Context, fullMethod string, err error) {
|
||||||
|
st := status.Convert(err)
|
||||||
|
var logLevel slog.Level
|
||||||
|
var logMsg string
|
||||||
|
switch st.Code() {
|
||||||
|
case codes.OK:
|
||||||
|
logLevel = slog.LevelInfo
|
||||||
|
logMsg = "OK"
|
||||||
|
case codes.Unauthenticated, codes.OutOfRange, codes.PermissionDenied, codes.NotFound:
|
||||||
|
logLevel = slog.LevelInfo
|
||||||
|
logMsg = "client error"
|
||||||
|
case codes.Internal, codes.Unknown, codes.DataLoss, codes.Unavailable, codes.DeadlineExceeded:
|
||||||
|
logLevel = slog.LevelError
|
||||||
|
logMsg = "server error"
|
||||||
|
default:
|
||||||
|
logLevel = slog.LevelError
|
||||||
|
logMsg = "unknown error"
|
||||||
|
}
|
||||||
|
slog.LogAttrs(ctx, logLevel, logMsg, slog.String("method", fullMethod))
|
||||||
|
}
|
Loading…
Reference in New Issue