translated all logs to english
This commit is contained in:
parent
e2e6f54ce6
commit
0e5da4c8aa
13 changed files with 277 additions and 90 deletions
|
|
@ -95,9 +95,9 @@ func Start(ctx context.Context, cfg Config, svc Service, log *zap.Logger) (*http
|
|||
ReadHeaderTimeout: 5 * time.Second,
|
||||
}
|
||||
go func() {
|
||||
log.Info("Admin API 已启用", zap.String("addr", cfg.Addr))
|
||||
log.Info("Admin API enabled", zap.String("addr", cfg.Addr))
|
||||
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Warn("Admin API 退出", zap.Error(err))
|
||||
log.Warn("Admin API exited", zap.Error(err))
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ func (s *Service) SeedMedia(ctx context.Context, root string, maxRegularSets int
|
|||
// 不存在 → 静默不导入贴纸/reaction」会被埋没(DB 已有旧数据时尤其隐蔽,表现为客户端反复
|
||||
// 拉取未 seed 的集)。配置 TELESRV_STICKER_SEED_DIR 指向真实导出目录即可。
|
||||
if s.log != nil {
|
||||
s.log.Warn("sticker/reaction seed 目录不存在,跳过媒体种子导入(配置 TELESRV_STICKER_SEED_DIR)",
|
||||
s.log.Warn("sticker/reaction seed directory does not exist, skipping media seed import (set TELESRV_STICKER_SEED_DIR)",
|
||||
zap.String("dir", root), zap.Error(err))
|
||||
}
|
||||
stats.Skipped = true
|
||||
|
|
@ -121,7 +121,7 @@ func (s *Service) logSeedPhase(phase string, started time.Time, before, after Se
|
|||
if s.log == nil {
|
||||
return
|
||||
}
|
||||
s.log.Info("媒体种子阶段完成",
|
||||
s.log.Info("media seed phase complete",
|
||||
zap.String("phase", phase),
|
||||
zap.Duration("elapsed", time.Since(started)),
|
||||
zap.Int("reactions", after.Reactions-before.Reactions),
|
||||
|
|
|
|||
|
|
@ -58,10 +58,10 @@ func (w *UploadPartGCWorker) runOnce(ctx context.Context) {
|
|||
}
|
||||
deleted, err := w.files.DeleteExpiredUploadParts(ctx, time.Now().Add(-w.ttl), w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("清理过期 upload_parts 失败", zap.Error(err))
|
||||
w.logger.Warn("expired upload_parts cleanup failed", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if deleted > 0 {
|
||||
w.logger.Info("清理过期 upload_parts 完成", zap.Int64("deleted", deleted))
|
||||
w.logger.Info("expired upload_parts cleanup complete", zap.Int64("deleted", deleted))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -241,15 +241,16 @@ func (w *RetentionWorker) runOutboxPoisonOnce(ctx context.Context) {
|
|||
}
|
||||
outboxDeleted, err := w.outbox.DeleteFailed(ctx, w.outboxPoisonRetention, w.batch)
|
||||
if err != nil {
|
||||
w.logger.Error("清理 terminal failed dispatch_outbox 失败",
|
||||
w.logger.Error("cleaning up terminal-failed dispatch_outbox rows failed",
|
||||
zap.String("signal", "dispatch_outbox_poison_cleanup_failed"),
|
||||
zap.Duration("quarantine", w.outboxPoisonRetention),
|
||||
zap.Error(err),
|
||||
)
|
||||
} else if outboxDeleted > 0 {
|
||||
// Error 级结构化信号刻意保留:发生 terminal failed 代表确定性编码、事件缺失
|
||||
// 或其它不可自动重试故障。任务删除只解冻在线 lane,不会删除 durable event。
|
||||
w.logger.Error("terminal failed dispatch_outbox 已结束隔离并释放用户 lane",
|
||||
// The Error level is intentionally kept: a terminal failure means deterministic
|
||||
// encoding, a missing event, or some other non-retryable fault. Deleting the row
|
||||
// only unfreezes the online lane — it does not delete the durable event.
|
||||
w.logger.Error("terminal-failed dispatch_outbox rows released from quarantine and unfroze their user lane",
|
||||
zap.String("signal", "dispatch_outbox_poison_released"),
|
||||
zap.Int("deleted", outboxDeleted),
|
||||
zap.Duration("quarantine", w.outboxPoisonRetention),
|
||||
|
|
@ -261,26 +262,26 @@ func (w *RetentionWorker) runRetentionOnce(ctx context.Context) {
|
|||
if w.authKeySessionLayers != nil {
|
||||
deleted, err := w.authKeySessionLayers.DeleteExpiredSessionLayers(ctx, w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收过期 auth-key session Layer 证据失败", zap.Error(err))
|
||||
w.logger.Warn("expired auth-key session layer evidence cleanup failed", zap.Error(err))
|
||||
} else if deleted > 0 {
|
||||
w.logger.Info("回收过期 auth-key session Layer 证据完成", zap.Int("deleted", deleted))
|
||||
w.logger.Info("expired auth-key session layer evidence cleanup complete", zap.Int("deleted", deleted))
|
||||
}
|
||||
}
|
||||
if w.loginCodeDeliveries != nil {
|
||||
deleted, err := w.loginCodeDeliveries.DeleteExpiredLoginCodeDeliveries(ctx, time.Now(), w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收过期 login-code delivery 回执失败", zap.Error(err))
|
||||
w.logger.Warn("expired login-code delivery receipt cleanup failed", zap.Error(err))
|
||||
} else if deleted > 0 {
|
||||
w.logger.Info("回收过期 login-code delivery 回执完成", zap.Int("deleted", deleted))
|
||||
w.logger.Info("expired login-code delivery receipt cleanup complete", zap.Int("deleted", deleted))
|
||||
}
|
||||
}
|
||||
if w.tempKeys != nil {
|
||||
expiredBefore := time.Now().Add(-tempAuthKeyExpiryGrace).Unix()
|
||||
tempDeleted, err := w.tempKeys.DeleteExpired(ctx, expiredBefore, w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收过期 temp auth key 绑定失败", zap.Error(err))
|
||||
w.logger.Warn("expired temp auth key binding cleanup failed", zap.Error(err))
|
||||
} else if tempDeleted > 0 {
|
||||
w.logger.Info("回收过期 temp auth key 绑定完成", zap.Int("deleted", tempDeleted))
|
||||
w.logger.Info("expired temp auth key binding cleanup complete", zap.Int("deleted", tempDeleted))
|
||||
}
|
||||
}
|
||||
if w.orphanAuthKeys != nil && w.orphanRetention > 0 {
|
||||
|
|
@ -295,39 +296,40 @@ func (w *RetentionWorker) runRetentionOnce(ctx context.Context) {
|
|||
} else {
|
||||
orphanDeleted, err := w.orphanAuthKeys.DeleteOrphaned(ctx, w.orphanRetention, w.batch, protected)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收未授权 orphan auth key 失败", zap.Error(err))
|
||||
w.logger.Warn("unauthorized orphan auth key cleanup failed", zap.Error(err))
|
||||
} else if orphanDeleted > 0 {
|
||||
w.logger.Info("回收未授权 orphan auth key 完成", zap.Int("deleted", orphanDeleted))
|
||||
w.logger.Info("unauthorized orphan auth key cleanup complete", zap.Int("deleted", orphanDeleted))
|
||||
}
|
||||
}
|
||||
}
|
||||
if w.botAPIUpdates != nil {
|
||||
botAPIDeleted, err := w.botAPIUpdates.DeleteDeliveredOrExpired(ctx, botAPIConfirmedGrace, w.botAPIRetention, w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收 bot_api_updates 队列失败", zap.Error(err))
|
||||
w.logger.Warn("bot_api_updates queue cleanup failed", zap.Error(err))
|
||||
} else if botAPIDeleted > 0 {
|
||||
w.logger.Info("回收 bot_api_updates 队列完成", zap.Int("deleted", botAPIDeleted))
|
||||
w.logger.Info("bot_api_updates queue cleanup complete", zap.Int("deleted", botAPIDeleted))
|
||||
}
|
||||
}
|
||||
if w.userUpdates != nil {
|
||||
userDeleted, err := w.userUpdates.DeleteConfirmedPrefix(ctx, w.retention, w.batch)
|
||||
if err != nil {
|
||||
w.logger.Warn("回收已共同确认的 user_update_events 前缀失败", zap.Error(err))
|
||||
w.logger.Warn("jointly-confirmed user_update_events prefix cleanup failed", zap.Error(err))
|
||||
} else if userDeleted > 0 {
|
||||
w.logger.Info("回收已共同确认的 user_update_events 前缀完成", zap.Int("deleted", userDeleted))
|
||||
w.logger.Info("jointly-confirmed user_update_events prefix cleanup complete", zap.Int("deleted", userDeleted))
|
||||
}
|
||||
}
|
||||
if w.channelUpdates != nil {
|
||||
channelDeleted, err := w.channelUpdates.DeleteExpiredChannelUpdateEvents(ctx, w.retention, w.batch)
|
||||
if err != nil {
|
||||
// store 会逐频道隔离坏 gap 后继续本轮;deleted 可能非零,必须同时记录,
|
||||
// 既不能把全局 pass 伪装成完全失败,也不能吞掉不变量错误。
|
||||
w.logger.Warn("回收过期 channel_update_events 存在隔离频道",
|
||||
// The store quarantines bad gaps per-channel and keeps going for the rest of this
|
||||
// pass; deleted can be non-zero, so it must be logged alongside the error — the pass
|
||||
// must not look like a total failure, nor should the invariant error get swallowed.
|
||||
w.logger.Warn("expired channel_update_events cleanup hit quarantined channels",
|
||||
zap.Int("deleted", channelDeleted),
|
||||
zap.Error(err),
|
||||
)
|
||||
} else if channelDeleted > 0 {
|
||||
w.logger.Info("回收过期 channel_update_events 连续前缀完成", zap.Int("deleted", channelDeleted))
|
||||
w.logger.Info("expired channel_update_events contiguous-prefix cleanup complete", zap.Int("deleted", channelDeleted))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -360,7 +362,7 @@ func (w *RetentionWorker) touchActiveAuthKeys(ctx context.Context, protected [][
|
|||
return true
|
||||
}
|
||||
if err := w.activeAuthKeyHeartbeat.TouchActiveRawAuthKeys(ctx, protected); err != nil {
|
||||
w.logger.Error("刷新 active raw auth key heartbeat 失败,本轮跳过 orphan GC",
|
||||
w.logger.Error("refreshing active raw auth key heartbeat failed, skipping orphan GC this round",
|
||||
zap.String("signal", "auth_key_heartbeat_failed"),
|
||||
zap.Int("active_keys", len(protected)),
|
||||
zap.Error(err),
|
||||
|
|
|
|||
|
|
@ -108,9 +108,9 @@ func Start(ctx context.Context, addr string, bots BotsService, users UsersServic
|
|||
return nil, err
|
||||
}
|
||||
go func() {
|
||||
logger.Info("Bot API 网关已启用", zap.String("addr", addr))
|
||||
logger.Info("Bot API gateway enabled", zap.String("addr", addr))
|
||||
if err := srv.Serve(ln); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
logger.Warn("Bot API 网关退出", zap.Error(err))
|
||||
logger.Warn("Bot API gateway exited", zap.Error(err))
|
||||
}
|
||||
}()
|
||||
if webhooks, ok := gateway.(GatewayWebhookControl); ok {
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ func NewPion(cfg PionConfig) (Service, error) {
|
|||
zap.Int("udp_port", cfg.UDPPort),
|
||||
zap.String("advertise_ip", cfg.AdvertiseIP))
|
||||
if cfg.AdvertiseIP == "127.0.0.1" {
|
||||
s.log.Warn("TELESRV_SFU_ADVERTISE_IP 为 127.0.0.1:真机 ICE 将无法连接(纯媒体面静默失败),多设备联调必须设为宿主机 LAN IP")
|
||||
s.log.Warn("TELESRV_SFU_ADVERTISE_IP is 127.0.0.1: real devices' ICE won't be able to connect (media-only silent failure); multi-device testing requires the host's LAN IP")
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ func New(cfg Config) (Service, error) {
|
|||
zap.Int("relay_min_port", cfg.RelayMinPort),
|
||||
zap.Int("relay_max_port", cfg.RelayMaxPort))
|
||||
if cfg.AdvertiseIP == "127.0.0.1" {
|
||||
cfg.Logger.Warn("TELESRV_TURN_ADVERTISE_IP 为 127.0.0.1:真机拿到的 relay candidate 不可达(跨网媒体面静默失败),跨设备通话必须设为客户端可达 IP")
|
||||
cfg.Logger.Warn("TELESRV_TURN_ADVERTISE_IP is 127.0.0.1: real devices get an unreachable relay candidate (cross-network media silently fails); cross-device calls require a client-reachable IP")
|
||||
}
|
||||
return &pionTURN{cfg: cfg, server: server}, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue