61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
// Copyright (c) 2026 S.A. (SNOWARE). Written for SCU Team.
|
|
// Licensed under MulanPubL-2.0.
|
|
// You may obtain a copy at: http://license.coscl.org.cn/MulanPubL-2.0
|
|
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND.
|
|
|
|
// logger 模块:基于 zerolog 的日志初始化,支持控制台输出(可读格式)+ 文件输出(JSON 结构化)。
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
// log 包级全局日志实例,所有 .go 文件共用。
|
|
var log zerolog.Logger
|
|
|
|
// initLogger 初始化全局日志:
|
|
// - 日志文件存储在 srcc.exe 同目录的 log/ 下,按日期命名
|
|
// - 控制台使用可读的 ConsoleWriter(带颜色)
|
|
// - 同时输出到控制台和文件
|
|
func initLogger() {
|
|
exePath, err := os.Executable()
|
|
if err != nil {
|
|
exePath, _ = os.Getwd()
|
|
}
|
|
exeDir := filepath.Dir(exePath)
|
|
|
|
logDir := filepath.Join(exeDir, "log")
|
|
if err := os.MkdirAll(logDir, 0755); err != nil {
|
|
panic(fmt.Sprintf("无法创建日志目录: %v", err))
|
|
}
|
|
|
|
today := time.Now().Format("2006-01-02")
|
|
logFile := filepath.Join(logDir, today+".log")
|
|
|
|
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("无法打开日志文件: %v", err))
|
|
}
|
|
|
|
consoleWriter := zerolog.ConsoleWriter{
|
|
Out: os.Stdout,
|
|
TimeFormat: "2006-01-02 15:04:05",
|
|
NoColor: false,
|
|
}
|
|
|
|
multi := io.MultiWriter(consoleWriter, file)
|
|
|
|
log = zerolog.New(multi).
|
|
With().
|
|
Timestamp().
|
|
Caller().
|
|
Logger().
|
|
Level(zerolog.DebugLevel)
|
|
}
|