Files
PixivFE/audit/audit_init.go
T
2024-10-21 15:26:24 +11:00

98 lines
2.4 KiB
Go

package audit
import (
"os"
"codeberg.org/vnpower/pixivfe/v2/config"
"codeberg.org/vnpower/pixivfe/v2/i18n"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
optionSaveResponse bool
MaxRecordedCount = 0
)
type Auditor struct {
Logger *zap.Logger
SugaredLogger *zap.SugaredLogger
}
// Init initializes the audit package and returns an Auditor instance.
func Init(saveResponse bool) (*Auditor, error) {
// Initialize the auditing parameter
optionSaveResponse = saveResponse
// Read configuration values from GlobalConfig
savePath := config.GlobalConfig.ResponseSaveLocation
logLevel := config.GlobalConfig.LogLevel
logOutputs := config.GlobalConfig.LogOutputs
logFormat := config.GlobalConfig.LogFormat
// Initialize zap logger with custom configuration
zapConfig := zap.NewProductionConfig()
// Adjust log encoding format based on config
switch logFormat {
case "json":
zapConfig.Encoding = "json"
case "console":
fallthrough
default:
zapConfig.Encoding = "console"
}
// Adjust log level based on config
var atom zap.AtomicLevel
switch logLevel {
case "debug":
atom = zap.NewAtomicLevelAt(zap.DebugLevel)
case "info":
atom = zap.NewAtomicLevelAt(zap.InfoLevel)
case "warn":
atom = zap.NewAtomicLevelAt(zap.WarnLevel)
case "error":
atom = zap.NewAtomicLevelAt(zap.ErrorLevel)
default:
atom = zap.NewAtomicLevelAt(zap.InfoLevel) // Default to info level
}
zapConfig.Level = atom
// Set custom output paths
if len(logOutputs) > 0 {
zapConfig.OutputPaths = logOutputs
} else {
// Default to standard error if logOutputs is empty
zapConfig.OutputPaths = []string{"stdout"}
}
// Use console-friendly time encoding
zapConfig.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
// Build and assign the logger
logger, err := zapConfig.Build()
if err != nil {
return nil, i18n.Errorf("failed to initialize zap logger: %w", err)
}
// Create sugared logger
sugaredLogger := logger.Sugar()
if !optionSaveResponse {
return &Auditor{Logger: logger, SugaredLogger: sugaredLogger}, nil
}
// Handle saving responses
MaxRecordedCount = 128
if err := os.MkdirAll(savePath, 0o700); err != nil {
logger.Error("Failed to create response save directory",
zap.Error(err),
zap.String("path", savePath),
)
return nil, i18n.Errorf("failed to create response save directory: %w", err)
}
return &Auditor{Logger: logger, SugaredLogger: sugaredLogger}, nil
}