mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-04-15 03:57:30 +08:00
fix logs
This commit is contained in:
179
pkg/logger/codes.go
Normal file
179
pkg/logger/codes.go
Normal file
@@ -0,0 +1,179 @@
|
||||
package logger
|
||||
|
||||
type CodeID int
|
||||
|
||||
const (
|
||||
C0001 CodeID = iota + 1
|
||||
C0002
|
||||
C0003
|
||||
C0004
|
||||
C0005
|
||||
C0006
|
||||
C0007
|
||||
C0008
|
||||
C0009
|
||||
C0010
|
||||
C0011
|
||||
C0012
|
||||
C0013
|
||||
C0014
|
||||
C0015
|
||||
C0016
|
||||
C0017
|
||||
C0018
|
||||
C0019
|
||||
C0020
|
||||
C0021
|
||||
C0022
|
||||
C0023
|
||||
C0024
|
||||
C0025
|
||||
C0026
|
||||
C0027
|
||||
C0028
|
||||
C0029
|
||||
C0030
|
||||
C0031
|
||||
C0032
|
||||
C0033
|
||||
C0034
|
||||
C0035
|
||||
C0036
|
||||
C0037
|
||||
C0038
|
||||
C0039
|
||||
C0040
|
||||
C0041
|
||||
C0042
|
||||
C0043
|
||||
C0044
|
||||
C0045
|
||||
C0046
|
||||
C0047
|
||||
C0048
|
||||
C0049
|
||||
C0050
|
||||
C0051
|
||||
C0052
|
||||
C0053
|
||||
C0054
|
||||
C0055
|
||||
C0056
|
||||
C0057
|
||||
C0058
|
||||
C0059
|
||||
C0060
|
||||
C0061
|
||||
C0062
|
||||
C0063
|
||||
C0064
|
||||
C0065
|
||||
C0066
|
||||
C0067
|
||||
C0068
|
||||
C0069
|
||||
C0070
|
||||
C0071
|
||||
C0072
|
||||
C0073
|
||||
C0074
|
||||
C0075
|
||||
C0076
|
||||
C0077
|
||||
C0078
|
||||
C0079
|
||||
C0080
|
||||
C0081
|
||||
C0082
|
||||
C0083
|
||||
C0084
|
||||
C0085
|
||||
C0086
|
||||
C0087
|
||||
C0088
|
||||
C0089
|
||||
C0090
|
||||
C0091
|
||||
C0092
|
||||
C0093
|
||||
C0094
|
||||
C0095
|
||||
C0096
|
||||
C0097
|
||||
C0098
|
||||
C0099
|
||||
C0100
|
||||
C0101
|
||||
C0102
|
||||
C0103
|
||||
C0104
|
||||
C0105
|
||||
C0106
|
||||
C0107
|
||||
C0108
|
||||
C0109
|
||||
C0110
|
||||
C0111
|
||||
C0112
|
||||
C0113
|
||||
C0114
|
||||
C0115
|
||||
C0116
|
||||
C0117
|
||||
C0118
|
||||
C0119
|
||||
C0120
|
||||
C0121
|
||||
C0122
|
||||
C0123
|
||||
C0124
|
||||
C0125
|
||||
C0126
|
||||
C0127
|
||||
C0128
|
||||
C0129
|
||||
C0130
|
||||
C0131
|
||||
C0132
|
||||
C0133
|
||||
C0134
|
||||
C0135
|
||||
C0136
|
||||
C0137
|
||||
C0138
|
||||
C0139
|
||||
C0140
|
||||
C0141
|
||||
C0142
|
||||
C0143
|
||||
C0144
|
||||
C0145
|
||||
C0146
|
||||
C0147
|
||||
C0148
|
||||
C0149
|
||||
C0150
|
||||
C0151
|
||||
C0152
|
||||
C0153
|
||||
C0154
|
||||
C0155
|
||||
C0156
|
||||
C0157
|
||||
C0158
|
||||
C0159
|
||||
C0160
|
||||
C0161
|
||||
C0162
|
||||
C0163
|
||||
C0164
|
||||
C0165
|
||||
C0166
|
||||
C0167
|
||||
C0168
|
||||
C0169
|
||||
C0170
|
||||
C0171
|
||||
C0172
|
||||
C0173
|
||||
)
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -49,7 +50,8 @@ type LogEntry struct {
|
||||
Level string `json:"level"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
Component string `json:"component,omitempty"`
|
||||
Message string `json:"message"`
|
||||
Code int `json:"code,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Fields map[string]interface{} `json:"fields,omitempty"`
|
||||
Caller string `json:"caller,omitempty"`
|
||||
}
|
||||
@@ -106,9 +108,9 @@ func EnableFileLoggingWithRotation(filePath string, maxSizeMB, maxAgeDays int) e
|
||||
logger.maxSizeBytes = int64(maxSizeMB) * 1024 * 1024
|
||||
logger.maxAgeDays = maxAgeDays
|
||||
if err := logger.cleanupOldLogFiles(); err != nil {
|
||||
log.Println("Failed to clean up old log files:", err)
|
||||
log.Println(C0145, err)
|
||||
}
|
||||
log.Println("File logging enabled:", filePath)
|
||||
log.Println(C0146, filePath)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -122,20 +124,28 @@ func DisableFileLogging() {
|
||||
logger.filePath = ""
|
||||
logger.maxSizeBytes = 0
|
||||
logger.maxAgeDays = 0
|
||||
log.Println("File logging disabled")
|
||||
log.Println(C0147)
|
||||
}
|
||||
}
|
||||
|
||||
func logMessage(level LogLevel, component string, message string, fields map[string]interface{}) {
|
||||
func logMessage(level LogLevel, component string, code CodeID, fields map[string]interface{}) {
|
||||
if level < currentLevel {
|
||||
return
|
||||
}
|
||||
|
||||
if fields == nil {
|
||||
fields = map[string]interface{}{}
|
||||
}
|
||||
|
||||
entryCode := int(code)
|
||||
entryMessage := extractSystemError(fields)
|
||||
|
||||
entry := LogEntry{
|
||||
Level: logLevelNames[level],
|
||||
Timestamp: time.Now().UTC().Format(time.RFC3339),
|
||||
Component: component,
|
||||
Message: message,
|
||||
Code: entryCode,
|
||||
Message: entryMessage,
|
||||
Fields: fields,
|
||||
}
|
||||
|
||||
@@ -150,7 +160,7 @@ func logMessage(level LogLevel, component string, message string, fields map[str
|
||||
jsonData, err := json.Marshal(entry)
|
||||
if err == nil {
|
||||
if err := logger.writeLine(append(jsonData, '\n')); err != nil {
|
||||
log.Println("Failed to write file log:", err)
|
||||
log.Println(C0148, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,9 +174,12 @@ func logMessage(level LogLevel, component string, message string, fields map[str
|
||||
entry.Timestamp,
|
||||
logLevelNames[level],
|
||||
formatComponent(component),
|
||||
message,
|
||||
formatCode(entry.Code),
|
||||
fieldStr,
|
||||
)
|
||||
if entry.Message != "" {
|
||||
logLine += " msg=" + entry.Message
|
||||
}
|
||||
|
||||
log.Println(logLine)
|
||||
|
||||
@@ -175,6 +188,24 @@ func logMessage(level LogLevel, component string, message string, fields map[str
|
||||
}
|
||||
}
|
||||
|
||||
func extractSystemError(fields map[string]interface{}) string {
|
||||
if fields == nil {
|
||||
return ""
|
||||
}
|
||||
v, ok := fields[FieldError]
|
||||
if !ok || v == nil {
|
||||
return ""
|
||||
}
|
||||
return strings.TrimSpace(fmt.Sprintf("%v", v))
|
||||
}
|
||||
|
||||
func formatCode(code int) string {
|
||||
if code <= 0 {
|
||||
return "code=0"
|
||||
}
|
||||
return "code=" + strconv.Itoa(code)
|
||||
}
|
||||
|
||||
func (l *Logger) writeLine(line []byte) error {
|
||||
l.fileMu.Lock()
|
||||
defer l.fileMu.Unlock()
|
||||
@@ -272,82 +303,82 @@ func formatFields(fields map[string]interface{}) string {
|
||||
return fmt.Sprintf("{%s}", strings.Join(parts, ", "))
|
||||
}
|
||||
|
||||
func Debug(message string) {
|
||||
logMessage(DEBUG, "", message, nil)
|
||||
func Debug(code CodeID) {
|
||||
logMessage(DEBUG, "", code, nil)
|
||||
}
|
||||
|
||||
func DebugC(component string, message string) {
|
||||
logMessage(DEBUG, component, message, nil)
|
||||
func DebugC(component string, code CodeID) {
|
||||
logMessage(DEBUG, component, code, nil)
|
||||
}
|
||||
|
||||
func DebugF(message string, fields map[string]interface{}) {
|
||||
logMessage(DEBUG, "", message, fields)
|
||||
func DebugF(code CodeID, fields map[string]interface{}) {
|
||||
logMessage(DEBUG, "", code, fields)
|
||||
}
|
||||
|
||||
func DebugCF(component string, message string, fields map[string]interface{}) {
|
||||
logMessage(DEBUG, component, message, fields)
|
||||
func DebugCF(component string, code CodeID, fields map[string]interface{}) {
|
||||
logMessage(DEBUG, component, code, fields)
|
||||
}
|
||||
|
||||
func Info(message string) {
|
||||
logMessage(INFO, "", message, nil)
|
||||
func Info(code CodeID) {
|
||||
logMessage(INFO, "", code, nil)
|
||||
}
|
||||
|
||||
func InfoC(component string, message string) {
|
||||
logMessage(INFO, component, message, nil)
|
||||
func InfoC(component string, code CodeID) {
|
||||
logMessage(INFO, component, code, nil)
|
||||
}
|
||||
|
||||
func InfoF(message string, fields map[string]interface{}) {
|
||||
logMessage(INFO, "", message, fields)
|
||||
func InfoF(code CodeID, fields map[string]interface{}) {
|
||||
logMessage(INFO, "", code, fields)
|
||||
}
|
||||
|
||||
func InfoCF(component string, message string, fields map[string]interface{}) {
|
||||
logMessage(INFO, component, message, fields)
|
||||
func InfoCF(component string, code CodeID, fields map[string]interface{}) {
|
||||
logMessage(INFO, component, code, fields)
|
||||
}
|
||||
|
||||
func Warn(message string) {
|
||||
logMessage(WARN, "", message, nil)
|
||||
func Warn(code CodeID) {
|
||||
logMessage(WARN, "", code, nil)
|
||||
}
|
||||
|
||||
func WarnC(component string, message string) {
|
||||
logMessage(WARN, component, message, nil)
|
||||
func WarnC(component string, code CodeID) {
|
||||
logMessage(WARN, component, code, nil)
|
||||
}
|
||||
|
||||
func WarnF(message string, fields map[string]interface{}) {
|
||||
logMessage(WARN, "", message, fields)
|
||||
func WarnF(code CodeID, fields map[string]interface{}) {
|
||||
logMessage(WARN, "", code, fields)
|
||||
}
|
||||
|
||||
func WarnCF(component string, message string, fields map[string]interface{}) {
|
||||
logMessage(WARN, component, message, fields)
|
||||
func WarnCF(component string, code CodeID, fields map[string]interface{}) {
|
||||
logMessage(WARN, component, code, fields)
|
||||
}
|
||||
|
||||
func Error(message string) {
|
||||
logMessage(ERROR, "", message, nil)
|
||||
func Error(code CodeID) {
|
||||
logMessage(ERROR, "", code, nil)
|
||||
}
|
||||
|
||||
func ErrorC(component string, message string) {
|
||||
logMessage(ERROR, component, message, nil)
|
||||
func ErrorC(component string, code CodeID) {
|
||||
logMessage(ERROR, component, code, nil)
|
||||
}
|
||||
|
||||
func ErrorF(message string, fields map[string]interface{}) {
|
||||
logMessage(ERROR, "", message, fields)
|
||||
func ErrorF(code CodeID, fields map[string]interface{}) {
|
||||
logMessage(ERROR, "", code, fields)
|
||||
}
|
||||
|
||||
func ErrorCF(component string, message string, fields map[string]interface{}) {
|
||||
logMessage(ERROR, component, message, fields)
|
||||
func ErrorCF(component string, code CodeID, fields map[string]interface{}) {
|
||||
logMessage(ERROR, component, code, fields)
|
||||
}
|
||||
|
||||
func Fatal(message string) {
|
||||
logMessage(FATAL, "", message, nil)
|
||||
func Fatal(code CodeID) {
|
||||
logMessage(FATAL, "", code, nil)
|
||||
}
|
||||
|
||||
func FatalC(component string, message string) {
|
||||
logMessage(FATAL, component, message, nil)
|
||||
func FatalC(component string, code CodeID) {
|
||||
logMessage(FATAL, component, code, nil)
|
||||
}
|
||||
|
||||
func FatalF(message string, fields map[string]interface{}) {
|
||||
logMessage(FATAL, "", message, fields)
|
||||
func FatalF(code CodeID, fields map[string]interface{}) {
|
||||
logMessage(FATAL, "", code, fields)
|
||||
}
|
||||
|
||||
func FatalCF(component string, message string, fields map[string]interface{}) {
|
||||
logMessage(FATAL, component, message, fields)
|
||||
func FatalCF(component string, code CodeID, fields map[string]interface{}) {
|
||||
logMessage(FATAL, component, code, fields)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user