mirror of https://github.com/allinssl/allinssl
113 lines
2.4 KiB
Go
113 lines
2.4 KiB
Go
package public
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
infoLogger *log.Logger
|
|
errorLogger *log.Logger
|
|
warnLogger *log.Logger
|
|
logFile *os.File
|
|
)
|
|
|
|
// InitLogger 初始化日志器(仅写入文件)
|
|
func InitLogger(logPath string) {
|
|
// 确保日志目录存在
|
|
dir := filepath.Dir(logPath)
|
|
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
|
|
panic("创建日志目录失败: " + err.Error())
|
|
}
|
|
|
|
var err error
|
|
logFile, err = os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
panic("无法打开日志文件: " + err.Error())
|
|
}
|
|
|
|
infoLogger = log.New(logFile, "[INFO] ", log.LstdFlags|log.Lshortfile)
|
|
errorLogger = log.New(logFile, "[ERROR] ", log.LstdFlags|log.Lshortfile)
|
|
warnLogger = log.New(logFile, "[WARN] ", log.LstdFlags|log.Lshortfile)
|
|
}
|
|
|
|
// Info 输出 Info 级别日志
|
|
func Info(msg string) {
|
|
infoLogger.Println(msg)
|
|
}
|
|
|
|
// Error 输出 Error 级别日志
|
|
func Error(msg string) {
|
|
errorLogger.Println(msg)
|
|
}
|
|
|
|
// Warn 输出 Warn 级别日志
|
|
func Warn(msg string) {
|
|
warnLogger.Println(msg)
|
|
}
|
|
|
|
// CloseLogger 关闭日志文件(建议在程序退出前调用)
|
|
func CloseLogger() {
|
|
if logFile != nil {
|
|
logFile.Close()
|
|
}
|
|
}
|
|
|
|
type Logger struct {
|
|
filePath string
|
|
logger *log.Logger
|
|
file *os.File
|
|
mutex sync.Mutex
|
|
}
|
|
|
|
func NewLogger(filePath string) (*Logger, error) {
|
|
// 确保日志目录存在
|
|
dir := filepath.Dir(filePath)
|
|
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
|
|
panic("创建日志目录失败: " + err.Error())
|
|
}
|
|
|
|
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
l := log.New(file, "", 0) // 不设置前缀,我们手动格式化
|
|
return &Logger{
|
|
filePath: filePath,
|
|
logger: l,
|
|
file: file,
|
|
}, nil
|
|
}
|
|
|
|
// Close 关闭日志文件
|
|
func (l *Logger) Close() {
|
|
l.file.Close()
|
|
}
|
|
|
|
// write 写日志,内部使用锁保证线程安全
|
|
func (l *Logger) write(level string, msg string) {
|
|
l.mutex.Lock()
|
|
defer l.mutex.Unlock()
|
|
|
|
timestamp := time.Now().Format("2006-01-02 15:04:05")
|
|
logLine := "[" + level + "] " + timestamp + " - " + msg
|
|
l.logger.Println(logLine)
|
|
}
|
|
|
|
// Info 输出 info 级别日志
|
|
func (l *Logger) Info(msg string) {
|
|
l.write("INFO", msg)
|
|
}
|
|
|
|
// Error 输出 error 级别日志
|
|
func (l *Logger) Error(msg string) {
|
|
l.write("ERROR", msg)
|
|
}
|
|
func (l *Logger) Debug(msg string) {
|
|
l.write("Debug", msg)
|
|
}
|