mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-11-18 06:03:42 +08:00
🔖 chore: migration logger package
This commit is contained in:
11
common/common.go
Normal file
11
common/common.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package common
|
||||
|
||||
import "fmt"
|
||||
|
||||
func LogQuota(quota int) string {
|
||||
if DisplayInCurrencyEnabled {
|
||||
return fmt.Sprintf("$%.6f 额度", float64(quota)/QuotaPerUnit)
|
||||
} else {
|
||||
return fmt.Sprintf("%d 点额度", quota)
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"one-api/common/logger"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -18,7 +19,7 @@ func InitConf() {
|
||||
setEnv()
|
||||
|
||||
if viper.GetBool("debug") {
|
||||
common.SysLog("running in debug mode")
|
||||
logger.SysLog("running in debug mode")
|
||||
}
|
||||
|
||||
common.IsMasterNode = viper.GetString("node_type") != "slave"
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"one-api/common/logger"
|
||||
"one-api/types"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -65,7 +66,7 @@ func AbortWithMessage(c *gin.Context, statusCode int, message string) {
|
||||
},
|
||||
})
|
||||
c.Abort()
|
||||
LogError(c.Request.Context(), message)
|
||||
logger.LogError(c.Request.Context(), message)
|
||||
}
|
||||
|
||||
func APIRespondWithError(c *gin.Context, status int, err error) {
|
||||
|
||||
@@ -2,6 +2,7 @@ package common
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"one-api/common/logger"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
@@ -9,7 +10,7 @@ func SafeGoroutine(f func()) {
|
||||
go func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
SysError(fmt.Sprintf("child goroutine panic occured: error: %v, stack: %s", r, string(debug.Stack())))
|
||||
logger.SysError(fmt.Sprintf("child goroutine panic occured: error: %v, stack: %s", r, string(debug.Stack())))
|
||||
}
|
||||
}()
|
||||
f()
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package common
|
||||
|
||||
import "encoding/json"
|
||||
import (
|
||||
"encoding/json"
|
||||
"one-api/common/logger"
|
||||
)
|
||||
|
||||
var GroupRatio = map[string]float64{
|
||||
"default": 1,
|
||||
@@ -11,7 +14,7 @@ var GroupRatio = map[string]float64{
|
||||
func GroupRatio2JSONString() string {
|
||||
jsonBytes, err := json.Marshal(GroupRatio)
|
||||
if err != nil {
|
||||
SysError("error marshalling model ratio: " + err.Error())
|
||||
logger.SysError("error marshalling model ratio: " + err.Error())
|
||||
}
|
||||
return string(jsonBytes)
|
||||
}
|
||||
@@ -24,7 +27,7 @@ func UpdateGroupRatioByJSONString(jsonStr string) error {
|
||||
func GetGroupRatio(name string) float64 {
|
||||
ratio, ok := GroupRatio[name]
|
||||
if !ok {
|
||||
SysError("group ratio not found: " + name)
|
||||
logger.SysError("group ratio not found: " + name)
|
||||
return 1
|
||||
}
|
||||
return ratio
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package common
|
||||
package logger
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -129,11 +129,3 @@ func FatalLog(v ...any) {
|
||||
_, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[FATAL] %v | %v \n", t.Format("2006/01/02 - 15:04:05"), v)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func LogQuota(quota int) string {
|
||||
if DisplayInCurrencyEnabled {
|
||||
return fmt.Sprintf("$%.6f 额度", float64(quota)/QuotaPerUnit)
|
||||
} else {
|
||||
return fmt.Sprintf("%d 点额度", quota)
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package notify
|
||||
|
||||
import (
|
||||
"context"
|
||||
"one-api/common"
|
||||
"one-api/common/logger"
|
||||
"one-api/common/notify/channel"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
@@ -23,13 +23,13 @@ func InitNotifier() {
|
||||
|
||||
func InitEmailNotifier() {
|
||||
if viper.GetBool("notify.email.disable") {
|
||||
common.SysLog("email notifier disabled")
|
||||
logger.SysLog("email notifier disabled")
|
||||
return
|
||||
}
|
||||
smtp_to := viper.GetString("notify.email.smtp_to")
|
||||
emailNotifier := channel.NewEmail(smtp_to)
|
||||
AddNotifiers(emailNotifier)
|
||||
common.SysLog("email notifier enable")
|
||||
logger.SysLog("email notifier enable")
|
||||
}
|
||||
|
||||
func InitDingTalkNotifier() {
|
||||
@@ -49,7 +49,7 @@ func InitDingTalkNotifier() {
|
||||
}
|
||||
|
||||
AddNotifiers(dingTalkNotifier)
|
||||
common.SysLog("dingtalk notifier enable")
|
||||
logger.SysLog("dingtalk notifier enable")
|
||||
}
|
||||
|
||||
func InitLarkNotifier() {
|
||||
@@ -69,7 +69,7 @@ func InitLarkNotifier() {
|
||||
}
|
||||
|
||||
AddNotifiers(larkNotifier)
|
||||
common.SysLog("lark notifier enable")
|
||||
logger.SysLog("lark notifier enable")
|
||||
}
|
||||
|
||||
func InitPushdeerNotifier() {
|
||||
@@ -81,7 +81,7 @@ func InitPushdeerNotifier() {
|
||||
pushdeerNotifier := channel.NewPushdeer(pushkey, viper.GetString("notify.pushdeer.url"))
|
||||
|
||||
AddNotifiers(pushdeerNotifier)
|
||||
common.SysLog("pushdeer notifier enable")
|
||||
logger.SysLog("pushdeer notifier enable")
|
||||
}
|
||||
|
||||
func InitTelegramNotifier() {
|
||||
@@ -95,5 +95,5 @@ func InitTelegramNotifier() {
|
||||
telegramNotifier := channel.NewTelegram(bot_token, chat_id, httpProxy)
|
||||
|
||||
AddNotifiers(telegramNotifier)
|
||||
common.SysLog("telegram notifier enable")
|
||||
logger.SysLog("telegram notifier enable")
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package notify
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"one-api/common"
|
||||
"one-api/common/logger"
|
||||
)
|
||||
|
||||
func (n *Notify) Send(ctx context.Context, title, message string) {
|
||||
@@ -17,14 +17,14 @@ func (n *Notify) Send(ctx context.Context, title, message string) {
|
||||
}
|
||||
err := channel.Send(ctx, title, message)
|
||||
if err != nil {
|
||||
common.LogError(ctx, fmt.Sprintf("%s err: %s", channelName, err.Error()))
|
||||
logger.LogError(ctx, fmt.Sprintf("%s err: %s", channelName, err.Error()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Send(title, message string) {
|
||||
//lint:ignore SA1029 reason: 需要使用该类型作为错误处理
|
||||
ctx := context.WithValue(context.Background(), common.RequestIdKey, "NotifyTask")
|
||||
ctx := context.WithValue(context.Background(), logger.RequestIdKey, "NotifyTask")
|
||||
|
||||
notifyChannels.Send(ctx, title, message)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
"one-api/common/logger"
|
||||
"time"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
@@ -16,17 +17,17 @@ func InitRedisClient() (err error) {
|
||||
redisConn := viper.GetString("redis_conn_string")
|
||||
|
||||
if redisConn == "" {
|
||||
SysLog("REDIS_CONN_STRING not set, Redis is not enabled")
|
||||
logger.SysLog("REDIS_CONN_STRING not set, Redis is not enabled")
|
||||
return nil
|
||||
}
|
||||
if viper.GetInt("sync_frequency") == 0 {
|
||||
SysLog("SYNC_FREQUENCY not set, Redis is disabled")
|
||||
logger.SysLog("SYNC_FREQUENCY not set, Redis is disabled")
|
||||
return nil
|
||||
}
|
||||
SysLog("Redis is enabled")
|
||||
logger.SysLog("Redis is enabled")
|
||||
opt, err := redis.ParseURL(redisConn)
|
||||
if err != nil {
|
||||
FatalLog("failed to parse Redis connection string: " + err.Error())
|
||||
logger.FatalLog("failed to parse Redis connection string: " + err.Error())
|
||||
return
|
||||
}
|
||||
RDB = redis.NewClient(opt)
|
||||
@@ -36,7 +37,7 @@ func InitRedisClient() (err error) {
|
||||
|
||||
_, err = RDB.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
FatalLog("Redis ping test failed: " + err.Error())
|
||||
logger.FatalLog("Redis ping test failed: " + err.Error())
|
||||
} else {
|
||||
RedisEnabled = true
|
||||
// for compatibility with old versions
|
||||
@@ -49,7 +50,7 @@ func InitRedisClient() (err error) {
|
||||
func ParseRedisOption() *redis.Options {
|
||||
opt, err := redis.ParseURL(viper.GetString("redis_conn_string"))
|
||||
if err != nil {
|
||||
FatalLog("failed to parse Redis connection string: " + err.Error())
|
||||
logger.FatalLog("failed to parse Redis connection string: " + err.Error())
|
||||
}
|
||||
return opt
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"one-api/common"
|
||||
"one-api/common/logger"
|
||||
"one-api/common/utils"
|
||||
"time"
|
||||
|
||||
@@ -21,7 +21,7 @@ func GetWSClient(proxyAddr string) *websocket.Dialer {
|
||||
if proxyAddr != "" {
|
||||
err := setWSProxy(dialer, proxyAddr)
|
||||
if err != nil {
|
||||
common.SysError(err.Error())
|
||||
logger.SysError(err.Error())
|
||||
return dialer
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package storage
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"one-api/common"
|
||||
"one-api/common/logger"
|
||||
)
|
||||
|
||||
func (s *Storage) Upload(ctx context.Context, data []byte, fileName string) string {
|
||||
@@ -17,7 +17,7 @@ func (s *Storage) Upload(ctx context.Context, data []byte, fileName string) stri
|
||||
}
|
||||
url, err := drive.Upload(data, fileName)
|
||||
if err != nil {
|
||||
common.LogError(ctx, fmt.Sprintf("%s err: %s", driveName, err.Error()))
|
||||
logger.LogError(ctx, fmt.Sprintf("%s err: %s", driveName, err.Error()))
|
||||
} else {
|
||||
return url
|
||||
}
|
||||
@@ -28,7 +28,7 @@ func (s *Storage) Upload(ctx context.Context, data []byte, fileName string) stri
|
||||
|
||||
func Upload(data []byte, fileName string) string {
|
||||
//lint:ignore SA1029 reason: 需要使用该类型作为错误处理
|
||||
ctx := context.WithValue(context.Background(), common.RequestIdKey, "Upload")
|
||||
ctx := context.WithValue(context.Background(), logger.RequestIdKey, "Upload")
|
||||
|
||||
return storageDrives.Upload(ctx, data, fileName)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"one-api/common"
|
||||
"one-api/common/logger"
|
||||
"one-api/model"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -29,20 +30,20 @@ var TGEnabled = false
|
||||
|
||||
func InitTelegramBot() {
|
||||
if TGEnabled {
|
||||
common.SysLog("Telegram bot has been started")
|
||||
logger.SysLog("Telegram bot has been started")
|
||||
return
|
||||
}
|
||||
|
||||
botKey := viper.GetString("tg.bot_api_key")
|
||||
if botKey == "" {
|
||||
common.SysLog("Telegram bot is not enabled")
|
||||
logger.SysLog("Telegram bot is not enabled")
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
TGBot, err = gotgbot.NewBot(botKey, getBotOpts())
|
||||
if err != nil {
|
||||
common.SysLog("failed to create new telegram bot: " + err.Error())
|
||||
logger.SysLog("failed to create new telegram bot: " + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
@@ -56,7 +57,7 @@ func StartTelegramBot() {
|
||||
botWebhook := viper.GetString("tg.webhook_secret")
|
||||
if botWebhook != "" {
|
||||
if common.ServerAddress == "" {
|
||||
common.SysLog("Telegram bot is not enabled: Server address is not set")
|
||||
logger.SysLog("Telegram bot is not enabled: Server address is not set")
|
||||
StopTelegramBot()
|
||||
return
|
||||
}
|
||||
@@ -70,7 +71,7 @@ func StartTelegramBot() {
|
||||
|
||||
err := TGupdater.AddWebhook(TGBot, urlPath, webHookOpts)
|
||||
if err != nil {
|
||||
common.SysLog("Telegram bot failed to add webhook:" + err.Error())
|
||||
logger.SysLog("Telegram bot failed to add webhook:" + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
@@ -80,7 +81,7 @@ func StartTelegramBot() {
|
||||
SecretToken: TGWebHookSecret,
|
||||
})
|
||||
if err != nil {
|
||||
common.SysLog("Telegram bot failed to set webhook:" + err.Error())
|
||||
logger.SysLog("Telegram bot failed to set webhook:" + err.Error())
|
||||
return
|
||||
}
|
||||
} else {
|
||||
@@ -96,13 +97,13 @@ func StartTelegramBot() {
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
common.SysLog("Telegram bot failed to start polling:" + err.Error())
|
||||
logger.SysLog("Telegram bot failed to start polling:" + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Idle, to keep updates coming in, and avoid bot stopping.
|
||||
go TGupdater.Idle()
|
||||
common.SysLog(fmt.Sprintf("Telegram bot %s has been started...:", TGBot.User.Username))
|
||||
logger.SysLog(fmt.Sprintf("Telegram bot %s has been started...:", TGBot.User.Username))
|
||||
TGEnabled = true
|
||||
}
|
||||
|
||||
@@ -135,7 +136,7 @@ func setDispatcher() *ext.Dispatcher {
|
||||
dispatcher := ext.NewDispatcher(&ext.DispatcherOpts{
|
||||
// If an error is returned by a handler, log it and continue going.
|
||||
Error: func(b *gotgbot.Bot, ctx *ext.Context, err error) ext.DispatcherAction {
|
||||
common.SysLog("telegram an error occurred while handling update: " + err.Error())
|
||||
logger.SysLog("telegram an error occurred while handling update: " + err.Error())
|
||||
return ext.DispatcherActionNoop
|
||||
},
|
||||
MaxRoutines: ext.DefaultMaxRoutines,
|
||||
@@ -173,7 +174,7 @@ func getMenu() []gotgbot.BotCommand {
|
||||
customMenu, err := model.GetTelegramMenus()
|
||||
|
||||
if err != nil {
|
||||
common.SysLog("Failed to get custom menu, error: " + err.Error())
|
||||
logger.SysLog("Failed to get custom menu, error: " + err.Error())
|
||||
}
|
||||
|
||||
if len(customMenu) > 0 {
|
||||
@@ -234,7 +235,7 @@ func getHttpClient() (httpClient *http.Client) {
|
||||
|
||||
proxyURL, err := url.Parse(proxyAddr)
|
||||
if err != nil {
|
||||
common.SysLog("failed to parse TG proxy URL: " + err.Error())
|
||||
logger.SysLog("failed to parse TG proxy URL: " + err.Error())
|
||||
return
|
||||
}
|
||||
switch proxyURL.Scheme {
|
||||
@@ -247,7 +248,7 @@ func getHttpClient() (httpClient *http.Client) {
|
||||
case "socks5":
|
||||
dialer, err := proxy.FromURL(proxyURL, proxy.Direct)
|
||||
if err != nil {
|
||||
common.SysLog("failed to create TG SOCKS5 dialer: " + err.Error())
|
||||
logger.SysLog("failed to create TG SOCKS5 dialer: " + err.Error())
|
||||
return
|
||||
}
|
||||
httpClient = &http.Client{
|
||||
@@ -258,7 +259,7 @@ func getHttpClient() (httpClient *http.Client) {
|
||||
},
|
||||
}
|
||||
default:
|
||||
common.SysLog("unknown TG proxy type: " + proxyAddr)
|
||||
logger.SysLog("unknown TG proxy type: " + proxyAddr)
|
||||
}
|
||||
|
||||
return
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"one-api/common/logger"
|
||||
"strings"
|
||||
|
||||
"one-api/common/image"
|
||||
@@ -21,27 +22,27 @@ var gpt4oTokenEncoder *tiktoken.Tiktoken
|
||||
func InitTokenEncoders() {
|
||||
if viper.GetBool("disable_token_encoders") {
|
||||
DISABLE_TOKEN_ENCODERS = true
|
||||
SysLog("token encoders disabled")
|
||||
logger.SysLog("token encoders disabled")
|
||||
return
|
||||
}
|
||||
SysLog("initializing token encoders")
|
||||
logger.SysLog("initializing token encoders")
|
||||
var err error
|
||||
gpt35TokenEncoder, err = tiktoken.EncodingForModel("gpt-3.5-turbo")
|
||||
if err != nil {
|
||||
FatalLog(fmt.Sprintf("failed to get gpt-3.5-turbo token encoder: %s", err.Error()))
|
||||
logger.FatalLog(fmt.Sprintf("failed to get gpt-3.5-turbo token encoder: %s", err.Error()))
|
||||
}
|
||||
|
||||
gpt4TokenEncoder, err = tiktoken.EncodingForModel("gpt-4")
|
||||
if err != nil {
|
||||
FatalLog(fmt.Sprintf("failed to get gpt-4 token encoder: %s", err.Error()))
|
||||
logger.FatalLog(fmt.Sprintf("failed to get gpt-4 token encoder: %s", err.Error()))
|
||||
}
|
||||
|
||||
gpt4oTokenEncoder, err = tiktoken.EncodingForModel("gpt-4o")
|
||||
if err != nil {
|
||||
FatalLog(fmt.Sprintf("failed to get gpt-4o token encoder: %s", err.Error()))
|
||||
logger.FatalLog(fmt.Sprintf("failed to get gpt-4o token encoder: %s", err.Error()))
|
||||
}
|
||||
|
||||
SysLog("token encoders initialized")
|
||||
logger.SysLog("token encoders initialized")
|
||||
}
|
||||
|
||||
func getTokenEncoder(model string) *tiktoken.Tiktoken {
|
||||
@@ -64,7 +65,7 @@ func getTokenEncoder(model string) *tiktoken.Tiktoken {
|
||||
var err error
|
||||
tokenEncoder, err = tiktoken.EncodingForModel(model)
|
||||
if err != nil {
|
||||
SysError(fmt.Sprintf("failed to get token encoder for model %s: %s, using encoder for gpt-3.5-turbo", model, err.Error()))
|
||||
logger.SysError(fmt.Sprintf("failed to get token encoder for model %s: %s, using encoder for gpt-3.5-turbo", model, err.Error()))
|
||||
tokenEncoder = gpt35TokenEncoder
|
||||
}
|
||||
}
|
||||
@@ -119,7 +120,7 @@ func CountTokenMessages(messages []types.ChatCompletionMessage, model string) in
|
||||
imageTokens, err := countImageTokens(url, detail)
|
||||
if err != nil {
|
||||
//Due to the excessive length of the error information, only extract and record the most critical part.
|
||||
SysError("error counting image tokens: " + err.Error())
|
||||
logger.SysError("error counting image tokens: " + err.Error())
|
||||
} else {
|
||||
tokenNum += imageTokens
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user