package jobs import ( "IotAdmin/core/logger" "IotAdmin/core/sdk/config" cLog "IotAdmin/core/sdk/pkg/logger" "IotAdmin/core/tools/writer" "fmt" "log" "sync" ) var jobLogger *JobLogger var once sync.Once type JobLogger struct { *logger.Helper } func init() { GetJobLogger() } func GetJobLogger() *JobLogger { once.Do(func() { loggerHelper := setupJobLogger() jobLogger = &JobLogger{ loggerHelper, } }) return jobLogger } // setupJobLogger 设置设备日志组件 func setupJobLogger() *logger.Helper { path := getJobLogPath() logCap := config.LoggerConfig.Cap if logCap == 0 { logCap = 1024 } output, err := writer.NewFileWriter( writer.WithPath(path), writer.WithCap(logCap<<10), writer.WithSuffix("log"), ) if err != nil { log.Printf("job logger setup error: %s \r\n", err.Error()) } level := logger.DebugLevel if config.ApplicationConfig.Mode == "prod" { level = logger.InfoLevel } return logger.NewHelper(logger.NewLogger(logger.WithLevel(level), logger.WithOutput(output), logger.WithName("JOB"))) } func getJobLogPath() string { path := config.LoggerConfig.Path if path == "" { path = "_logs/" } else if path[len(path)-1] != '/' { path += "/" } path += "jobs" return path } func CleanJobLog(days int) error { path := getJobLogPath() return cLog.DeleteLogsOlderThan(path, "log", days) } func (j *JobLogger) Info(msg string, args ...interface{}) { msg = "[CRON] " + msg if len(args) > 0 { for _, v := range args { msg += fmt.Sprintf(" %v", v) } } j.Helper.Info(msg) } func (j *JobLogger) Infof(msg string, args ...interface{}) { msg = "[JobCore] " + msg j.Helper.Infof(msg, args...) } func (j *JobLogger) Error(err error, msg string, args ...interface{}) { msg = "[CRON] " + msg if len(args) > 0 { for _, v := range args { msg += fmt.Sprintf("%v ", v) } } j.Helper.Errorf("%s; ERROR: %s", msg, err.Error()) } func (j *JobLogger) Errorf(msg string, args ...interface{}) { msg = "[JobCore] " + msg j.Helper.Errorf(msg, args...) }